【发布时间】:2018-09-20 15:37:31
【问题描述】:
当我将数组作为道具传递并更改数组的值时,我的功能组件不会重新呈现。
https://codesandbox.io/s/5ym4vkrnnk
或
import React, { PureComponent, Fragment } from "react";
import ReactDOM from "react-dom";
const SomeFunctionalComponent = props => {
return <span>{props.array[0]}</span>;
};
class App extends PureComponent {
state = {
array: [1, 2, 3]
};
increase = () => {
var array = this.state.array;
array[0] = array[0] + 1;
this.setState({ array: array });
console.log(this.state.array);
};
render() {
return (
<Fragment>
<button onClick={this.increase}>Increase</button>
<SomeFunctionalComponent array={this.state.array} />
</Fragment>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
我的问题:
- 为什么会这样?
- 我该如何改变呢?
提前感谢您的帮助!
【问题讨论】:
-
您正在更改数组中的值,但对数组的引用保持不变。由于
react在您调用increase()之前和之后看到相同的对象引用,因此它实际上并不知道发生了什么变化。您应该尝试使用纯函数和不变性。
标签: javascript reactjs