【问题标题】:React setState automatically with standard Javascript function使用标准 Javascript 函数自动响应 setState
【发布时间】:2017-07-13 00:31:59
【问题描述】:

ReactJS 上的新手,让我们看看我正在使用的一些代码

<!-- language: lang-js -->
import Oak from './Oak'
class Space extends Component {
  componentWillMount () {  Newstate = Oak(oldState) }
  componentWillUpdate () { }

  render () {
    return()
  }
}

function mapStateToProps (state) { return {bigStateTree: state.bigTree } }
export default connect(mapStateToProps)(Space)
----------
//Oak.js
export default function Oak (inputState = null) {
 dosome 3D dance 
 return bigStateTree
}

在 ctrl 面板 (Space.js) 上使用 ReactJS 和 Redux,在画布 (Oak.js) 上使用一些 3d。
问题是:
我希望从返回值中从 Oak.js 中获取数据,然后重新渲染(再次调用 Newstate = Oak(oldState))状态中的 3d 基础,当状态更改 3d 更改时,它是 3d 更改状态更改时的循环,没有点击没有变化。

基于 StackOverflow NEVER mutate this.state directly 的建议

我现在不知道该怎么办。

【问题讨论】:

    标签: javascript reactjs react-redux state


    【解决方案1】:

    首先在构造函数中你需要设置初始状态。您可以按如下方式执行此操作,其中 yourProperty 是您想要的键,而 defaultValue 是您选择的值:

    this.state = { yourProperty: defaultValue }
    

    然后在componentWillMount()中:

    this.setState({ yourProperty: Oak(this.state.yourProperty) })
    

    最后在 render() 方法中访问状态:

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

    唯一可以在没有 setState 方法的情况下为 this.state 赋值的情况是在构造函数中。另请注意,您不能在 render() 方法中更改状态。

    阅读 React 组件生命周期会很有用。

    【讨论】:

    • 谢谢@Andre,我确实阅读了 ReactJs 文档。目前,我使用减速器来调度商店。通过调用( Newstate = Oak(oldState) )创建的新状态,因此该函数将再次调用。然后重新渲染。这可能吗,或者我通过调用再现状态的函数走错了路。
    • 我倾向于将 redux 的使用限制在有意义的地方。您需要问自己,您正在处理的是否应该是本地状态,或者是否应该在组件之间共享。
    • 所有组件都需要与Store共享,只有少数组件,除了画布
    • 什么负责更新状态和调度。由于 mapStateToProps,您的组件应该通过 this.props 接收更新的 redux 状态
    • 使用它来保持 Canvas 最新数据和更新数据库
    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2020-02-11
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多