Javascript 是否可以在React中重新安装部件?
因此,我有一个顶级组件,它将更新的Javascript 是否可以在React中重新安装部件?,javascript,reactjs,Javascript,Reactjs,因此,我有一个顶级组件,它将更新的道具向下发送到所有子组件 其中一个子组件在视图中得到如下呈现: const View = ({ currentSection }) => { console.log(currentSection.Component) return ( <div> <div className='main-content'> <div className='sidenav'>
道具向下发送到所有子组件
其中一个子组件在视图中得到如下呈现:
const View = ({
currentSection
}) => {
console.log(currentSection.Component)
return (
<div>
<div className='main-content'>
<div className='sidenav'>
<div className='section'>
<h2 className='section-header'>My Login Page</h2>
</div>
</div>
<div>
{ currentSection.Component }
</div>
</div>
</div>
)
}
您可以看到它是一个简单的组件,但奇怪的问题是道具
正在更新,但状态没有更新
所以基本上组件并没有重新安装。只有当所有内容都第一次呈现给服务器时,它才会装载
那么,我有没有办法重新安装它 您可能需要组件将从react 16.3+中的react about constructor()行为中接收props
生命周期方法或静态方法getDerivedStateFromProps
:
注
避免复制道具到状态!这是一个常见的错误:
问题是这两个都是不必要的(你可以使用
而直接使用this.props.color),并创建bug(更新到
颜色道具不会反映在状态中)
仅当您有意忽略道具时才使用此模式
更新。在这种情况下,重命名要调用的prop是有意义的
initialColor或defaultColor。然后,您可以强制一个组件
必要时通过更改其按键来“重置”其内部状态
阅读我们关于避免派生状态的博客文章,了解如何做
如果你认为你需要一些状态来依靠道具
我曾尝试使用组件willmount
&组件didmount
,但它们从未被调用。为什么需要将道具置于状态?为什么不直接调用此.props.members?嗯,我尝试使用getDerivedStateFromProps
&尝试记录nextrops
,但它没有记录任何内容:(我使用的是16.4.0
顺便说一句。嗯,这是一个相当大的应用程序,所以我不确定我是否可以发布一个演示。我想你可以有一个单独的演示来关注问题跟踪,应该更容易找出问题。你知道这让我觉得我真的不需要州里的成员。
class Members extends React.Component {
constructor(props) {
super(props);
this.state = {
members: props.members
};
}
render() {
const { members } = this.state;
return <MembersList members={members} />;
}
}
constructor(props) {
super(props);
// Don't do this!
this.state = { color: props.color };
}