Javascript 为什么setState不设置将数组追加到状态?
我必须创建一个包含多个链接的文本区域,然后将其拆分为数组。是的,它工作正常,但我想将该数组设置为链接列表中的状态:[],但当我单击“提交”按钮时,它在初始化时会给我空数组。但当我再次按下提交按钮时,它会给出我想要的列表,为什么?下面是代码和输出Javascript 为什么setState不设置将数组追加到状态?,javascript,reactjs,Javascript,Reactjs,我必须创建一个包含多个链接的文本区域,然后将其拆分为数组。是的,它工作正常,但我想将该数组设置为链接列表中的状态:[],但当我单击“提交”按钮时,它在初始化时会给我空数组。但当我再次按下提交按钮时,它会给出我想要的列表,为什么?下面是代码和输出 onSubmit = event => { this.setState({ loading: true, host: undefined }); const { text, linkList } = this.state;
onSubmit = event => {
this.setState({ loading: true, host: undefined });
const { text, linkList } = this.state;
console.log(text);
const mList = text.split("\n").filter(String);
console.log(mList);
this.setState({
linkList: [...mList]
});
console.log(linkList);
event.preventDefault();
};
首先单击输出控制台
youtube.com
google.com
facebook.com
------------------------------------------------------------
["youtube.com", "google.com", "facebook.com"]
------------------------------------------------------------
[]
输出控制台第二次单击
youtube.com
google.com
facebook.com
---------------------------------------------
["youtube.com", "google.com", "facebook.com"]
---------------------------------------------
["youtube.com", "google.com", "facebook.com"]
下面的代码可能会有所帮助
onSubmit = event => {
this.setState({ loading: true, host: undefined }, () => {
const { text, linkList } = this.state;
console.log(link);
const mList = text.split("\n").filter(String);
console.log(mList);
this.setState({
linkList: [...mList]
}, () => {
console.log(linkList);
event.preventDefault();
});
});
};
下面的代码可能会有所帮助
onSubmit = event => {
this.setState({ loading: true, host: undefined }, () => {
const { text, linkList } = this.state;
console.log(link);
const mList = text.split("\n").filter(String);
console.log(mList);
this.setState({
linkList: [...mList]
}, () => {
console.log(linkList);
event.preventDefault();
});
});
};
setState是异步的。这意味着它不会马上发生,而是在很短的时间内发生。如果您添加了一个:
console.log(linkList)
在渲染方法的顶部,您将看到与预期一样附加的项目。setState是异步的。这意味着它不会马上发生,而是在很短的时间内发生。如果您添加了一个:
console.log(linkList)
在“渲染方法”的顶部,您将看到与预期一样附加的项目。它可能正在附加,只是在下一次渲染之前不可用 从: setState并不总是立即更新组件。它可以批处理更新或将更新推迟到以后。这使得在调用setState之后立即读取This.state成为一个潜在的陷阱。相反,请使用componentDidUpdate或setState回调setStateupdater callback,这两者都保证在应用更新后触发
它可能正在追加,只是在下一次渲染之前不可用 从: setState并不总是立即更新组件。它可以批处理更新或将更新推迟到以后。这使得在调用setState之后立即读取This.state成为一个潜在的陷阱。相反,请使用componentDidUpdate或setState回调setStateupdater callback,这两者都保证在应用更新后触发