【发布时间】:2018-12-19 08:38:05
【问题描述】:
我有一个 Paypal 组件,它在成功付款时执行逻辑。
目标是首先执行paypal/axios.post,然后是this.setState(...)。
以下代码块执行setState() 在 Paypal 逻辑之前,并且没有付款:
render() {
const onSuccess = payment => {
axios
.post(
"http://compute.amazonaws.com:3000/ethhash",
{userInput: this.props.userInput}
)
.then(response => console.log(response.data, payment))
.catch(function(error) {
console.log(error);
});
};
this.setState({ redirect: true });
if (this.state.redirect) {
return <Redirect to="/FinishedPaying" userInput={this.state.userInput} />;
}}
如果我将 setState() 嵌套在 onSuccess 或 axios.post 逻辑中,它会破坏我的 (express) 服务器。奇怪的是,我的服务器给我的错误是某个函数不是函数……命名函数在所有其他条件下都有效。
感谢您对我的帮助,干杯:)
【问题讨论】:
-
不要在渲染中使用
setState。也不应该在渲染中触发请求 -
嗯,谢谢您的反馈。
setState应该在哪里呈现?当您说“请求”时,您是在谈论axios.post逻辑吗? -
setState 可以在生命周期方法或任何事件处理程序方法中调用。是的,我的意思是“请求”-> axios.post 在你的情况下。
-
setState 如果你在 render 中使用它会调用 render 并且 setState 会再次调用 render 所以它会无限循环
标签: reactjs paypal render setstate