-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方法 –