Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在React中重新安装部件?_Javascript_Reactjs - Fatal编程技术网

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 };
}