Reactjs-在渲染方法中引用状态子元素时应对未定义的错误

标签 reactjs

我在以特定方式使用 React 时经常遇到问题。

我有一个组件层次结构。应用程序状态位于公共(public)所有者最上面的组件中。我在 getInitialState 中使用空对象或数组设置初始状态。我通过 ajax 调用该组件的 componentDidMount 中该状态所有者最上面组件的方法来获取数据。但是,无论我在同一个组件中还是在子组件中使用 ajax 调用的成功回调中设置的状态,通过 props 将状态传递给它们,我几乎总是会遇到变量找不到或未定义的错误.

从概念上思考,当我安装组件时调用渲染方法,因此它不会在嵌入其中的变量中找到数据。但我们有 getInitialState。这看起来没问题,但是如果在渲染方法中使用嵌套对象怎么办? getInitialState 中的状态只是空对象,因此对 to be 子元素的引用未定义。

即使使用 componentWillMount 也不起作用。唯一的方法似乎是具有初始状态,并且不引用渲染中那些未定义的子元素。然而,在大多数情况下这似乎是必要的。这个问题是否与这种必要性有关,我认为这实际上是一种反模式。

我发现 React 在最初的教程和更简单的案例中对我非常有用,但现在我无法有效地使用它。

如何以最佳实践正确地应对这种行为?

最佳答案

第一个解决方案: 我使用的方法只是检查渲染函数中是否存在状态

render: function() {
    var result = { this.state.field ?
        this.state.field.embeddedfield ?
            <div> this.state.field.embeddedfield </div>
        : <div> Data are loading! </div>

      : "" }
    return {result};
}

第二个解决方案 如果您希望数据在渲染之前准备好,您需要在外部执行第一次获取:

  $.ajax({...}).success(function(res) {
         <MyView data={res} /> // render your function on success
    });

看这个:bind(this) not working on ajax success function

要回答为什么 componentWillMount 不起作用:将 ajax 调用放入 componentWillMount 中将不起作用,因为它不会等待您的调用被获取,并且还可能发生循环并发。

关于Reactjs-在渲染方法中引用状态子元素时应对未定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620553/

相关文章:

javascript - 如何对数组中的每个元素进行 API 调用

javascript - HTML 输入不会在handleChange 上更新

javascript - 如何在React JS中正确导入组件: expected a string but got: object ERROR

javascript - 如何在同一函数中异步调用后获取更新的状态

javascript - 通过 shouldComponentUpdate 对无状态、函数式组件进行 React 优化

reactjs - React应用程序抛出错误: Uncaught TypeError: Cannot read property 'shape' of undefined

javascript - React JSX 中的函数不返回值

javascript - SetState 导致多次重新渲染

javascript - 添加带有 url 的 anchor ,同时将 url 作为属性传递

reactjs - componentWillMount 内的 'require' 是否是反模式?