【问题标题】:How can hooks update the props passed to component?钩子如何更新传递给组件的道具?
【发布时间】:2019-11-17 08:06:31
【问题描述】:

我有一个组件正在传递一个道具,当道具的值发生变化时我需要更新该组件。

我尝试使用 useEffect 钩子来查看 props 和 prop.propIWantToChange,但在渲染后我无法将更新传递给组件。

App.js

let tracker = true;

const handleChangeTracker = () => {
  tracker = !tracker
}

const App = props => {
  <React.Fragment>
    <button onClick={handleChangeTracker} >Change</button>
    <Component1 active={tracker} />
    <Component2 />
    <Component3 />
    <Component4 />
  </React.Fragment>
}

Component1.js

const Component1 = props => {

  useEffect(() => {
    console.log(props.active)
  }, [props.active])

  return (  
    <div>{props.active && "You see this when its true"}</div>  
  )
}

单击按钮时,我希望跟踪器的值在真假之间切换。然后我希望它将新值传递给 Component1。目前它会改变值(我通过控制台日志跟踪它)但它不会将新值传递给组件。

【问题讨论】:

  • useEffect的拼写错误。
  • 那只是转移代码的一个错字,一切顺利。
  • 是的,我已经发布了一个解决方案。试试看,让我知道它是否有效:-)

标签: reactjs react-hooks


【解决方案1】:

该值未传递给子组件,因为您的“跟踪器”变量未存储在状态中。状态值的变化会触发新的渲染,而不是变量值的变化。

因此,当在 'handleChangeTracker' 中更新 'tracker' 时,它不会触发新的渲染,因此新值不会传递给子组件,因此不会对子组件进行新的渲染。

解决方案是将“tracker”保存在一个状态中,然后更新“handleChangeTracker”中的状态。

this.state = { tracker = true; }

const handleChangeTracker = () => {
  this.setState({
            tracker: !tracker
        })
}

const App = props => {
  <React.Fragment>
    <button onClick={handleChangeTracker} >Change</button>
    <Component1 active={this.state.tracker} />
    <Component2 />
    <Component3 />
    <Component4 />
  </React.Fragment>
}

【讨论】:

  • 这完美!我不知道传递的道具值必须处于状态才能导致新的渲染。非常感谢。
猜你喜欢
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2020-07-01
  • 2020-12-19
  • 2018-07-07
  • 2021-02-09
相关资源
最近更新 更多