How do I pass parent state to its child components?

前端 未结 2 1985
旧时难觅i
旧时难觅i 2021-02-01 07:27

I am new in React ES6 and I think I am modifying the state in a wrong way. My code is like this when I set state on parent component:

class App extends React.Com         


        
相关标签:
2条回答
  • 2021-02-01 08:03

    If you wanna pass the state {name:"helloworld"} do it like that:

    class App extends React.Component {
    constuctor(props)  {
         super(props);
         this.state = {name:"helloworld"};
    }
     render() { 
      return( 
       <ChildComponent {...this.state} /> 
      ); 
     } 
    }
    

    and in the child component you can do:

    <Text>{this.props.name}</Text>
    

    But If you want to pass the props of the component to it's child:

       class App extends React.Component {
        constuctor(props)  {
             super(props);
             this.state = {name:"helloworld"};
        }
         render() { 
          return( 
           <ChildComponent {...this.props} />
          ); 
         } 
        }
    

    and in the child component you can do:

    <Text>{this.props.stuff}</Text>//place stuff by any property name in props
    

    Now if you want to update the state of parent component from the child component you will need to pass a function to the child component:

     class App extends React.Component {
        constuctor(props)  {
             super(props);
             this.state = {name:"helloworld"};
        }
        update(name){
           this.setState({name:name})// or with es6 this.setState({name})
        }
        render() { 
         return( 
          <ChildComponent {...this.props, update: this.update.bind(this)} />
         ); 
        } 
      }
    

    and then in child component you can use this : this.props.update('new name')

    UPDATE

    use more es6 and removed constructor

    class App extends React.Component {
        state = {name:"helloworld"};
    
        // es6 function, will be bind with adding .bind(this)
        update = name => {
           this.setState({name:name})// or with es6 this.setState({name})
        }
    
        render() { 
         // notice that we removed .bind(this) from the update
         return(
         //send multiple methods using ','
          <ChildComponent {...this.props, update = this.update} />
         ); 
        } 
      }
    
    0 讨论(0)
  • 2021-02-01 08:11

    if you want to send the whole state :

    return( <ChildComponent {...this.state} /> );
    

    But this is likely a bad idea :)

    edit: in your scenario, this sends a 'name' property to child component with value 'helloworld'

    0 讨论(0)
提交回复
热议问题