gpt4 book ai didi

javascript - 在回调中制作第二个 setState - 不好的做法?

转载 作者:行者123 更新时间:2023-11-30 08:25:12 24 4
gpt4 key购买 nike

我有一个组件,我在其中创建第二个 setState() 作为第一个 setState() 中的回调。这是不好的做法吗?还有其他方法可以同步调用两个 setStates 吗?

最初,当我在第一个 setState() 中调用 updateData() 时,在 myComponent 组件中呈现正确数据时出现延迟。落后了一步。这可行,但它是传统的吗?

import React, { Component } from "react";
import MyComponent from "../../components/MyComponent";
import RaisedButton from "material-ui/RaisedButton";
import { generateData } from "./generateData";

class App extends Component {
constructor(props) {
super(props);

this.state = {
text: "",
data: []
};
}

updateData(){
this.setState({
data: generateData(this.state.text)
})
}

handleChange(e) {
this.setState({
text: e.target.value
}, () => {
this.updateData(this.state.text)
});
}

handleSubmit(e) {
e.preventDefault();
}

render() {
return (
<div>
<h2>Input</h2>
<form onSubmit={e => this.handleSubmit(e)}>
<textarea
value={this.state.text}
onChange={e => this.handleChange(e)}
/>
<div>
<RaisedButton type="submit"/>
</div>
</form>
<h2>Output</h2>
<MyComponent data={this.state.data} />
</div>
);
}
}

export default App;

最佳答案

问题似乎是您正在从 this.state.text 更新 data。相反,您可以通过引用原始输入值在一次调用中同时更新 textdata:

handleChange(e) {
this.setState({
text: e.target.value,
data: generateData(e.target.value),
});
}

这肯定优于对 setState 进行两次调用(这意味着可能会重新渲染组件两次)。

关于javascript - 在回调中制作第二个 setState - 不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com