-1
例如,我有这样的代码:在React.js中从this.setState()调用this.setState()会不好吗?
class Example extends Component {
constructor() {
super();
this.state = {
value: "",
disabled: false,
isLoaderOpened: false
};
}
render() {
return (
<div>
<input
value={this.state.value}
onChange={this.onChange}
disabled={this.state.disabled}
/>
<button onClick={this.onClick}>Load</button>
{this.state.isLoaderOpened && <div>Loading</div>}
</div>
);
}
onClick =() => this.fetchData(this.state.value);
onChange = e => this.setState({ value: e.target.value });
fetchData = value => {
Promise.resolve()
.then(() => this.setState({ disabled: true },() => showLoader()))
.then(() => this.handleRequest(this.props.url, value))
.then(res =>
this.setState({ data: res.json() },() => this.hideLoader())
);
};
showLoader =() => this.setState({ isLoaderOpened: true });
hideLoader =() => this.setState({ isLoaderOpened: false });
handleRequest = (url, value) => fetch(url + "?value=" + value);
}
这样做不好,我从setState
函数调用,也使用setState
?我想重复使用经常使用的方法,为简洁起见,将它们作为setState
中的回调传递是很舒服的。
为什么不只需在原始setState调用中设置打开的加载器? – Neal
你可以在那里设置你需要的状态的所有部分,而不是调用一个相同的方法。不过,我会说,单独使用“隐藏”和“显示”方法是不好的。使用“切换”功能,根据需要传递“true”或“false”。 – jmargolisvt
@Neal因为如果在某些地方我使用原始setState调用并在某个地方 - showLoader/hideLoader方法 –