Javascript Redux React:如何将更新后的状态传递给函数onChange?
我是一个新的反应和尝试一个简单的事情。我不明白如何修改状态并将其传递给函数。请在下面找到我的代码: 我跳过了多余的代码,只跳过了重点,除了这个功能,其他一切都很好Javascript Redux React:如何将更新后的状态传递给函数onChange?,javascript,reactjs,web,redux,react-redux,Javascript,Reactjs,Web,Redux,React Redux,我是一个新的反应和尝试一个简单的事情。我不明白如何修改状态并将其传递给函数。请在下面找到我的代码: 我跳过了多余的代码,只跳过了重点,除了这个功能,其他一切都很好 state = { card: this.props.card // No probelm here , the props are correctly received in my component }; 我正在尝试更新状态onChange,并在我的调度程序中使用此状态值在该事件之后生成一个新状态。请在此处找到此
state = {
card: this.props.card // No probelm here , the props are correctly received in my component
};
我正在尝试更新状态onChange,并在我的调度程序中使用此状态值在该事件之后生成一个新状态。请在此处找到此功能的代码段:
<select
class="form-control m-1"
value={this.state.card.type}
onChange={e => {
let newType = e.target.value;
this.setState(prevState => ({
card: {
...prevState.card,
type: newType
}
}));
console.log(this.state.card) // **This gives me the old state, not updated one**
this.props.updateCard(this.state.card) // Correctly receiving the updateCard Props ,
}}
>
<option value="ABC">Option1</option>
<option value="DEF">Option2</option>
</select>
我的减速机:
case "UPDATE_CARD": {
console.log("INSIDE REDUCER");
console.log(action.card);
return {
cards: state.cards.map(card=>
card.id === action.card.id ? action.card: card
)
};
}
请帮忙。我在这里搜索了很多东西,但没有任何帮助。这是因为
setState
不是同步的:
。。。
onChange={e=>{
设newType=e.target.value;
this.setState(prevState=>({
卡片:{
…prevState.card,
类型:新类型
}
}), () => {
console.log(this.state.card)//将为您提供新值
//您还应该在此处对redux状态进行任何更新以触发
//按正确的顺序重新渲染并防止争用情况
});
console.log(this.state.card)/**这给了我旧的状态,而不是更新的状态**
this.props.updateCard(this.state.card)//正确接收updateCard道具,
}}
...
这是因为setState
不同步:
。。。
onChange={e=>{
设newType=e.target.value;
this.setState(prevState=>({
卡片:{
…prevState.card,
类型:新类型
}
}), () => {
console.log(this.state.card)//将为您提供新值
//您还应该在此处对redux状态进行任何更新以触发
//按正确的顺序重新渲染并防止争用情况
});
console.log(this.state.card)/**这给了我旧的状态,而不是更新的状态**
this.props.updateCard(this.state.card)//正确接收updateCard道具,
}}
...
在您的代码中,您更新状态并在同一个函数中传递给dispatch,所有内容都在同一范围内,因此为什么您不能将新值直接传递给该dispatch本身?谢谢@RajKumar,但无论何时更新状态,您能帮我传递修改后的状态吗,它将使组件返回更新的值以使用它,这里的问题是您试图在onChange事件触发器内获取更新的状态,因此这就是原因,您没有获取更新的值我很抱歉,当您说:将新值直接传递给dispach,这就是我正在做的。我的新值是修改后的状态。你有什么建议?我提到的新值是你传递给SetState的值。你可以这样试试<代码>this.setState(prevState=>{const updatestate={card:{…prevState.card,type:newType}};this.props.updateCard(updatestate);返回updatestate;})代码>在您的代码中,您更新状态并在同一个函数中传递给dispatch,所有内容都在同一范围内,因此为什么您不能将新值直接传递给该dispatch本身?谢谢@RajKumar,但无论何时更新状态,您能帮我传递修改后的状态吗,它将使组件返回更新的值以使用它,这里的问题是您试图在onChange事件触发器内获取更新的状态,因此这就是原因,您没有获取更新的值我很抱歉,当您说:将新值直接传递给dispach,这就是我正在做的。我的新值是修改后的状态。你有什么建议?我提到的新值是你传递给SetState的值。你可以这样试试<代码>this.setState(prevState=>{const updatestate={card:{…prevState.card,type:newType}};this.props.updateCard(updatestate);返回updatestate;})代码>谢谢,这很有效。如果你不介意的话,你能详细说明一下吗?将有助于学习Simply putsetState
是一个异步函数,这意味着代码不会停止执行并在执行console.log语句之前等待它完成,因此您无法保证在按类似顺序注销状态时它已完成。所以请仔细阅读异步javascript以避免将来出现类似这样的陷阱:)谢谢!我上个月刚开始学习JS,这是一段颠簸的旅程:)哈哈,是的,系好安全带…;)谢谢,这个有用。如果你不介意的话,你能详细说明一下吗?将有助于学习Simply putsetState
是一个异步函数,这意味着代码不会停止执行并在执行console.log语句之前等待它完成,因此您无法保证在按类似顺序注销状态时它已完成。所以请仔细阅读异步javascript以避免将来出现类似这样的陷阱:)谢谢!我上个月刚开始学习JS,这是一段颠簸的旅程:)哈哈,是的,系好安全带…;)
case "UPDATE_CARD": {
console.log("INSIDE REDUCER");
console.log(action.card);
return {
cards: state.cards.map(card=>
card.id === action.card.id ? action.card: card
)
};
}