react基础学习四 --- 组件通信、过滤、生命周期

1、组件传参

1.1 父组件–>子组件

父组件中通过子组件的属性传递,子组件通过props接收。

//父组件
 class ParentList extends React.Component{
                constructor(){
                    super();
                    this.state = {
                        name:"父组件",
                        age:50
                    }
                }
                render(){
                    return (<div>
                        <ChildList age={this.state.age} name={this.state.name}/>
                    </div>)
                }
            }
            //子组件
            class ChildList extends React.Component{
                render(){
                    return <h1>{this.props.name}{this.props.age}</h1>
                }
            }
           ReactDOM.render(<ParentList/>,document.getElementById('my'))

1.2 子组件–>父组件

父组件里通过子组件的属性传递一个方法,子组件通过props触发。

  class ParentList extends React.Component{
                constructor(){
                    super();
                    this.state = {
                        name:"张大爷",
                        age:60
                    }
                }
                handle(e){
                    this.setState({
                        name:e.name
                    })
                }
                render(){
                    return (
                        <div>
                            <h1>父标签</h1>
                            <h1>{this.state.name}</h1>
                            <ChildList name={this.state.name} handleParent={this.handle.bind(this)}/>
                        </div>
                    )
                }
            }
            class ChildList extends React.Component{
                constructor(props){
                    super(props);
                    this.state = {
                        name:props.name,
                        age:30
                    }
                }
                handleChange(e){
                    this.setState({
                        name:e.target.value
                    })
                    this.props.handleParent({name:e.target.value})
                }
                render(){
                    return (
                        <div>
                            <h1>子标签</h1>
                            <h1>父:{this.props.name}子:{this.state.name}</h1>
                            <input type="text" value={this.state.name} onChange={(e)=>{this.handleChange(e)}}/>   
                        </div>
                    )
                }
            }
           ReactDOM.render(<ParentList/>,document.getElementById('my'))

1.3 兄弟组件

通过共同的父组件来达到目的。

 class ParentList extends React.Component{
                constructor(){
                    super();
                    this.state = {
                        name:"我是父组件"
                    }
                }
                change(i){
                 
                    this.setState({
                        name:i
                    })
                }
                render(){
                    return (
                        <div>
                            <ChildListA name={this.state.name} change={this.change.bind(this)}/>
                            <ChildListB name={this.state.name}/>
                        </div>
                    )
                }
            }
            class ChildListA extends React.Component{
                render(){
                    return (
                        <div>A组件:<button onClick={()=>{this.props.change('ChildListA')}}>click</button></div>
                    )
                }
            }
            class ChildListB extends React.Component{
                render(){
                    return (
                        <div>
                            B组件:{this.props.name}
                        </div>
                    )
                }
            }
           ReactDOM.render(<ParentList/>,document.getElementById('my'))

1.4 父组件—>孙子组件

父组件到子组件到孙子组件。

 class ParentList extends React.Component{
               constructor(){
                   super();
                   this.state = {
                       name:"老王",
                       age:50
                   }
               }
               change(e){
                   this.setState({
                       name:e.target.value
                   })
               }
               render(){
                   return (
                       <div>
                        <h1>父标签</h1>
                        <input type="text" value={this.state.name} onChange={(e)=>{this.change(e)}}/>
                        <ChildList name={this.state.name}/>   
                       </div>
                   )
               }
           }
           class ChildList extends React.Component{
               render(){
                   return (
                       <div>
                        <h1>子标签</h1>
                        <h1>{this.props.name}</h1>
                        <SunList msg={this.props.name}/>
                       </div>
                   )
               }
           }
           class SunList extends React.Component{
               render(){
                   return (
                       <div>
                            <h1>孙组件</h1>
                            <h1>{this.props.msg}</h1>
                       </div>
                   )
               }
           }
           ReactDOM.render(<ParentList/>,document.getElementById('my'))

2、过滤

react并没有像vue的过滤器的说法。这里要达到过滤的目的,通过自定义函数来实现。

 class Hello extends React.Component{
               //年龄过滤
               ageFilter(age){
                   if(age >20){
                       return "都那么老了"
                   }else{
                       return "好年轻啊"
                   }
               }
               //过滤
               numFilter(n){
                   switch (n) {
                       case '1':
                           return "这是1啊"
                       case '2':
                            return "这是2啊"
                       default:
                           return n;
                   }
               }
               render(){
                   let user = {
                       name:'lili',
                       age:18,
                       n:'1'
                   }
                   return (
                       <div>
                            <h1>hello,{this.ageFilter(user.age)}</h1>
                            <h1>hello,{this.numFilter(user.n)}</h1>
                       </div>
                   )
               }
           }
            ReactDOM.render(
                <div>
                    <Hello></Hello>
                </div>
                ,document.getElementById('my'))

3、生命周期

  class Hello extends React.Component{
                constructor(){
                    super();
                    this.state = {
                        opacity:1
                    }
                }
                // 生命周期函数
                componentDidMount(){
                    this.timer = setInterval(() => {
                        var num = this.state.opacity;
                        num-=.05;
                        if(num<0.01){
                            num = 1;
                        }
                        this.setState({
                            opacity:num
                        })
                    }, 300);
                }
                // 生命周期函数
                componentWillUnmount(){
                  clearInterval(this.timer)  
                }
                render(){
                    var styleName = {
                        fontSize:"30px",
                        color:'#f60'
                    }
                    return (
                        <div>
                            <h1 style={styleName}>Hello</h1>
                            <h1 style={{opacity:this.state.opacity}}>Hello World</h1>
                        </div>
                    )
                }
            }
            ReactDOM.render(
                <div>
                    <Hello></Hello>
                </div>
                ,document.getElementById('my'))

组件的生命周期

1、mounting 已插入真实DOM–挂载
componentWillMount() 组件将要挂载
componentDidMount() 组件完成挂载
2、updating 正在被重新渲染 – 更新
componentWillReceiveProps() 组件将要接收prop,这个方法在初始化render时不会调用。
shouldComponentUpdate() 返回一个布尔值。在组件接收到新的props或state时被调用。在初始化的时候不会调用。
componentWillUpdate() 组件将要更新
render() 渲染
componentDidUpdate() 组件完成更新时立即调用。在初始化的时候不会调用。
3、unmounting – 卸载
componentWillUnmount() 组件从DOM中移出的时候立刻调用
4、error handling
componentDidCatch() 错误处理

猜你喜欢

转载自blog.csdn.net/guo187/article/details/89342778