2017-03-17 162 views
0
class RaisablePaper extends Component { 
     constructor(props) { 
      super(); 
      this.state = { 
       state1: "state1", 
       openNow: props.boxOpen, 

      }; 
     } 
} 

我试图通过执行<RaisablePaper boxOpen={this.state.dOpen}/>向此类发送值。但是,只要dOpen发生变化,它似乎不会更新openNow。非常感谢帮助。状态值未更新reactjs

+0

以及D打开只是正被从父改变父状态变量。 –

回答

0

您正在设置将组件安装在constructor之前的状态,当道具更改时不会再次触发组件。为此,您可以使用React的componentWillReceiveProps,当将新的道具发送到组件时,将会调用它。

class RaisablePaper extends Component { 
    constructor(props) { 
    super(); 
    this.state = { 
     state1: "state1", 
     openNow: props.boxOpen 
    }; 
    } 
    componentWillReceiveProps(props) { 
    this.setState({ 
     openNow: props.boxOpen 
    }); 
    } 
} 
+0

这是我正在寻找,但不幸的是不知道名称。非常感谢你 –

+0

很高兴我能提供帮助。查看[React的生命周期方法的文档](https://facebook.github.io/react/docs/react-component.html),它们可以非常有用。 –

0

直接使用道具而不用担心将它同步到您的状态会更简单。一般来说,尽可能依靠道具是一个好主意,只有在绝对必要时才会涉及到状态。

但是Fabian Schultz是绝对正确的 - 你的构造函数在组件挂载前只运行一次,所以如果组件依赖于在构建过程中初始化的状态,你永远不会收到后续的更新。


我只是想象你如何使用boxOpen状态显示的例子。你可以用你的render方法正在做的事情来遵循相同的总体思路。

class RaisablePaper extends Component { 
    render() { 
    return (
     <div className={this.props.boxOpen ? 'is-open' : ''}> 
     Here's some content... 
     </div> 
    ); 
    } 
}