在 redux 操作后获取更新状态
Get updated state after redux action
我正在尝试使用 redux 操作在更改后使用当前状态更新数据库。
例如。 removeStock
被调用并将库存状态从 ["A", "B", "C"] 更改为 ["A", "C"]
此后我立即调用 updateWatchlist
将新状态发送到数据库。问题是 mapStateToProps 没有更新,并且正在将原始数据发送到服务器,尽管页面上显示了正确的数据。
动作
///update
export const updateWatchlist = (payload, selected) => async (dispatch: Function, getState) => {
const response = await axios
.put(`${API_URL}/api/editWatchlist/${selected}`, {body: payload}, tokenConfig(getState))
}
///Delete
export const removeStock = (payload) => ({
type: DELETE_STOCK,
payload,
});
组件
const Security = ({index, name, stocks, selected}) => {
const dispatch = useDispatch();
const [taskName, setTaskName] =useState(name)
const removeTask = (e) => {
e.stopPropagation()
dispatch(removeStock(index))
dispatch(updateWatchlist(stocks, selected))
}
return (
<Row className="list-group-item">
<div className="item-titles">
{name}
</div>
<button onClick={(e) => removeTask(e)} className="remove-item">
<i className="glyphicon glyphicon-remove"></i>
</button>
</Row>
);
}
const mapStateToProps = (state) => {
return {
stocks: state.Watchlist.stock.watchlist,
}
}
因为您的 removeTask 调用堆栈保留了 stocks 变量的原始值,并且 updateWatchlist 的 2 个参数仍然引用该值。在 redux 中的状态更改后,您的组件将被重新渲染并更改 sto
const removeTask = (e) => {
//// stocks not changed after dispatch(removeStock(index))
/// it just changed when component rerender
e.stopPropagation()
dispatch(removeStock(index))
dispatch(updateWatchlist(stocks, selected))
}
我建议你可以使用 useEffect 来观察股票何时变化然后更新你的观察列表:
useEffect(()=>{
dispatch(updateWatchlist(stocks, selected))
},[stocks])
我正在尝试使用 redux 操作在更改后使用当前状态更新数据库。
例如。 removeStock
被调用并将库存状态从 ["A", "B", "C"] 更改为 ["A", "C"]
此后我立即调用 updateWatchlist
将新状态发送到数据库。问题是 mapStateToProps 没有更新,并且正在将原始数据发送到服务器,尽管页面上显示了正确的数据。
动作
///update
export const updateWatchlist = (payload, selected) => async (dispatch: Function, getState) => {
const response = await axios
.put(`${API_URL}/api/editWatchlist/${selected}`, {body: payload}, tokenConfig(getState))
}
///Delete
export const removeStock = (payload) => ({
type: DELETE_STOCK,
payload,
});
组件
const Security = ({index, name, stocks, selected}) => {
const dispatch = useDispatch();
const [taskName, setTaskName] =useState(name)
const removeTask = (e) => {
e.stopPropagation()
dispatch(removeStock(index))
dispatch(updateWatchlist(stocks, selected))
}
return (
<Row className="list-group-item">
<div className="item-titles">
{name}
</div>
<button onClick={(e) => removeTask(e)} className="remove-item">
<i className="glyphicon glyphicon-remove"></i>
</button>
</Row>
);
}
const mapStateToProps = (state) => {
return {
stocks: state.Watchlist.stock.watchlist,
}
}
因为您的 removeTask 调用堆栈保留了 stocks 变量的原始值,并且 updateWatchlist 的 2 个参数仍然引用该值。在 redux 中的状态更改后,您的组件将被重新渲染并更改 sto
const removeTask = (e) => {
//// stocks not changed after dispatch(removeStock(index))
/// it just changed when component rerender
e.stopPropagation()
dispatch(removeStock(index))
dispatch(updateWatchlist(stocks, selected))
}
我建议你可以使用 useEffect 来观察股票何时变化然后更新你的观察列表:
useEffect(()=>{
dispatch(updateWatchlist(stocks, selected))
},[stocks])