React 不会在 setState 后重新渲染组件
React does not re-render component after setState
我有一个奇怪的问题。 state
已更新,但组件未重新渲染。当我按下按钮 Add Hi All
时,必须添加额外的 <p>Hi All</p>
。但是我没有在屏幕上看到它们。
有趣的是,如果我将 new_row
更改为这样的 1 元素数组
var new_row = [<p key = {key_number + "d"}> Hi all!</p>];
然后将使用 parag_s.concat(new_row)
而不是 parag_s.push(new_row)
一切正常。 state.ps
数组的包含在两种变体中似乎完全相同但是当我使用时不知何故
parag_s.push(new_row)
重新渲染过程没有开始。
这就是为什么我觉得我做错了什么。你可以帮帮我吗?为什么以下代码不起作用?
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
render() {
return (
<BlablablaComponent/>
);
}
}
class BlablablaComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
ps: [],
keyNumber: 1
}
this.addRow = this.addRow.bind(this);
}
addRow() {
var parag_s = this.state.ps;
var key_number = this.state.keyNumber;
key_number = key_number + 1;
var new_row = <p key = {key_number + "d"}> Hi all!</p>;
parag_s.push(new_row);
var new_state = {ps: parag_s, keyNumber: key_number};
this.setState(new_state);
}
render() {
return (
<div>
{this.state.ps}
<button type="button" onClick = {this.addRow} >Add Hi All</button>
</div>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
setState
对数组执行浅层比较,当您 push
进入数组时,实例不会改变,因此 React 看不到变化。当您使用 concat
时,将返回一个新的数组实例。
您可以使用展开运算符而不是 concat
setState({
key_number,
parag_s: [...parag_s, new_row]
})
我有一个奇怪的问题。 state
已更新,但组件未重新渲染。当我按下按钮 Add Hi All
时,必须添加额外的 <p>Hi All</p>
。但是我没有在屏幕上看到它们。
有趣的是,如果我将 new_row
更改为这样的 1 元素数组
var new_row = [<p key = {key_number + "d"}> Hi all!</p>];
然后将使用 parag_s.concat(new_row)
而不是 parag_s.push(new_row)
一切正常。 state.ps
数组的包含在两种变体中似乎完全相同但是当我使用时不知何故
parag_s.push(new_row)
重新渲染过程没有开始。
这就是为什么我觉得我做错了什么。你可以帮帮我吗?为什么以下代码不起作用?
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
render() {
return (
<BlablablaComponent/>
);
}
}
class BlablablaComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
ps: [],
keyNumber: 1
}
this.addRow = this.addRow.bind(this);
}
addRow() {
var parag_s = this.state.ps;
var key_number = this.state.keyNumber;
key_number = key_number + 1;
var new_row = <p key = {key_number + "d"}> Hi all!</p>;
parag_s.push(new_row);
var new_state = {ps: parag_s, keyNumber: key_number};
this.setState(new_state);
}
render() {
return (
<div>
{this.state.ps}
<button type="button" onClick = {this.addRow} >Add Hi All</button>
</div>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
setState
对数组执行浅层比较,当您 push
进入数组时,实例不会改变,因此 React 看不到变化。当您使用 concat
时,将返回一个新的数组实例。
您可以使用展开运算符而不是 concat
setState({
key_number,
parag_s: [...parag_s, new_row]
})