ReactJS - setState不更新属性

时间:2018-03-12 09:13:26

标签: javascript reactjs

我在React组件中有一个object类型的属性。使用setState我正在尝试修改此属性。但是在里面给这个属性赋一个新值 setState无效。请在下面找到我的示例代码。

export const Test = ({
  objectArray,
  changeState = function (newoOjectArray) {
    this.setState({objectArray: newoOjectArray});
    console.log(JSON.stringify(objectArray)); // Doesn't reflect changes. Prints old objectArray
  }
 }) => 
(
    <div>Some data</div>
)

某些用户操作会触发对changeState(newoOjectArray)的调用。我在setState函数内调用了changeState 调用setState后,如果我将objectArray变量打印到控制台,它仍然保留旧值。 如何setStateobjectArray分配新值 感谢

修改

我知道setState是异步的,对属性的更新可能会在延迟后反映出来。 但是在上面的示例代码的情况下,即使在延迟之后,objectArray变量也永远不会更新 我已经实现了componentWillReceiveProps(nextProps)方法并且它被调用但它总是接收旧的objectArray。 所以我不认为这个问题与setState异步有关。

EDIT2

我创建了一个示例应用程序来演示我面临的问题。示例应用程序在本地运行良好,我可以重现该问题。 但我无法在codepen中使用相同的示例应用代码。它给了我一些&#39; unexpected token&#39;错误。 但我希望看看这些代码能更好地理解我的问题。 代码基于现有的应用程序结构。

Codepen example here

在代码中,我有一个Parent和两个孩子Child1Child2。 在Parent中,我定义了一个函数changeState,我将其作为属性传递给Child1。 并且Child2我正在通过name&#39;来自Parent的财产 点击'Change Name&#39; Child1中的按钮会触发changeState Parent函数的调用。 Parent中姓名的初始值为&#39; Robert&#39;。从changeState调用Child1,新名称值为&#39; Tom&#39;。 但是在changeState函数中,将新值分配给&#39; name&#39;使用setState无效。我正在调用一个函数来打印&#39; name&#39; 在setState完成后,它会打印旧名称值,而不是setState中分配的新名称。

0 个答案:

没有答案