【问题标题】:Not initializing state from props不从道具初始化状​​态
【发布时间】:2021-02-18 07:49:32
【问题描述】:

我正在使用 React 版本“17.0.1”,当我尝试从 props 初始化组件状态时,它不起作用,它只是用未定义的初始化状态。以下示例将说明我的问题.. 组件Two

    class Two extends React.Component {
     state = {
       name: this.props.option.name
      }
     render(){
       console.log(this.state.name)

     return (
       <div>
          {this.state.name}
       </div>
      )
    }
}

而组件One 是:

    class One extends React.Component {
     render(){
        return  <Two option={name='riaz'} />
       }
     }

在组件 Two 中,我试图从 props 初始化状态,但它只是用 undefined 初始化它

ReactDOM.render(<One />,document.getElementById('app'))

我已经安装并配置了@babel/plugin-proposal-class-properties

【问题讨论】:

    标签: reactjs


    【解决方案1】:
    class One extends React.Component {
         render(){
            return  <Two option={name='riaz'} />
           }
         }
    

    应该是

    class One extends React.Component {
         render(){
            return  <Two option={{name:'riaz'}} />
           }
         }
    

    您访问它的方式告诉我您的option 是一个具有name 属性的对象。所以你也需要这样传递它。

    我也认为@Konstantin Samarin 在处理类组件中的道具时说有一个适当的构造函数是正确的。

    所以你的构造函数将是:-

    constructor(props) {
      super(props);
      this.state = {
           name: this.props.option.name
      }
    }
    

    但是 React 不建议这样做。您可以在他共享的文档的链接中看到相同的内容。

    【讨论】:

    • 非常感谢。你是绝对正确的。问题出在 它应该是
    【解决方案2】:

    你也应该像这样调用构造方法并初始化道具:

    constructor(props) {
      super(props);
      this.state = {
           name: this.props.option.name
      }
    }
    

    否则 props 未定义,查看官方文档:https://reactjs.org/docs/react-component.html#constructor。将 props 复制到 state 中仍然不是最佳实践。

    【讨论】:

    • 我也试过了,但也没有效果
    • 感谢您的回答,但是从道具初始化状​​态的最佳方法是什么???
    • 只有在真正需要时才应该这样做。例如,根据用户操作,状态会发生变化:顺序、显示的内容、移动的内容等。如果是静态渲染,则根本不需要,只需使用 props。
    • 是的,我知道,但是当我们需要从道具初始化状​​态时,推荐的方法是什么????
    • 反正问题解决了。我刚刚通过@Lakshya Thakur 提到的带有不正确对象的道具,但现在它工作正常
    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2019-05-08
    • 2019-07-12
    • 2018-03-20
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多