[英]In React, which value should I rely on when doing a fetch in a dropdown? the e.target value or the value from the state
这种东西的最佳实践是什么?
handleChange = e => {
const { value } = e.target;
this.setState({ selectedOption: value });
this.fetchrepos(value);
};
handleChangeVersion2 = e => {
const { value } = e.target;
this.setState({ selectedOption: value }, () => {
this.fetchrepos(this.state.selectedOption);
});
};
两者都不。 每个功能都应该有一个明确定义的目标( 单一职责原则)。 一个用于处理状态更改,另一个用于处理数据获取等副作用。 你不应该把行为结合在一起。
您应该使用组件生命周期函数之一来获取状态中的选择值更新并获取数据。 componentDidUpdate
就是其中之一。
handleChange = e => {
const { value } = e.target;
this.setState({ selectedOption: value });
};
componentDidUpdate(prevState) {
if (prevState.selectedOption !== this.state.selectedOption) {
fetchRepos(this.state.selectedOption);
}
}
您应该传递e.target
值,因为setState
是一个异步函数。 但是,如果您在状态更改时触发 api 调用,则依赖状态值并在生命周期方法中触发您的 api 调用。
你所做的也是更好的解决方案来获取 api 作为setState()
的回调
handleChangeVersion2 = e => {
const { value } = e.target;
this.setState({ selectedOption: value }, () => {
this.fetchrepos(this.state.selectedOption);
});
};
async fetchrepos(searcTerm) {
const response = await fetch(
`https://api.github.com/search/repositories?q=${searcTerm}`
);
const data = await response.json();
this.setState({ data: data.items });
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.