Javascript React redux状态更新isn';t反映到相关组件
我有两个react组件,即Dashboard和singleFeature。在Dashboard中,我有一个ionRangleSlider,它从redux状态获取值。我正在仪表板中渲染singleFeature组件。SingleFeature组件创建一个获取网络请求,并使用dispatch方法更新redux状态 位于仪表板内部的IonRangeSloider从由singleFeature组件更新的redux状态获取值。但不管我尝试了什么,它都没有反映出我的想法。但是,我可以看到redux状态正在更新,但没有反映在任何组件中 代码: Dashboard.jsJavascript React redux状态更新isn';t反映到相关组件,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有两个react组件,即Dashboard和singleFeature。在Dashboard中,我有一个ionRangleSlider,它从redux状态获取值。我正在仪表板中渲染singleFeature组件。SingleFeature组件创建一个获取网络请求,并使用dispatch方法更新redux状态 位于仪表板内部的IonRangeSloider从由singleFeature组件更新的redux状态获取值。但不管我尝试了什么,它都没有反映出我的想法。但是,我可以看到redux状态正在更
<div id="slider"><IonRangeSlider ref={r => this.ionSlider = r}
skin={this.state.skin} values={this.state.values} /></div>
<SingleFeature name={this.state.name} id={this.state.id} user={this.state.user} />
componentDidUpdate(prevProps,prevState) {
if (this.props.dates !== prevProps.dates) {
console.log(`In update`)
this.ionSlider.update({ values: this.props.dates })
}
}
这两个组件都通过运行这些方法的{connect}通过react-redux
连接
//fetch from redux store
const FetchFromStore = (state) => {
return {
dates: state.dates
}
}
//update redux store functions
const UpdateStore = (dispatch) => {
return {
updateState: (dates) => dispatch(
{
type: 'UPDATE_DATES',
payload: dates
})
}
}
和减速器文件
const stateActions = (state = initialState, action) => {
switch (action.type) {
case 'UPDATE_DATES':
state.dates = [...state.dates,...action.payload];
console.log(state.dates) //which is updating
return state;
}
return state;
}
状态更新后,
组件diddupdate
方法均不起作用。感谢所有评论。看来我更新状态的方式不对
//redux payload actions
const stateActions = (state = initialState, action) => {
switch (action.type) {
case 'UPDATE_DATES':
// state.dates = [...state.dates,...action.payload];
let dates_arr = [...state.dates];
state.dates = [...dates_arr,...action.payload]
return {...state}
}
return state;
}
它工作正常,正在更新所有组件。如果您可以看到Redux状态正在更改,则罪魁祸首可能是您的组件。您是否尝试过在组件的
componentdiddupdate
中登录?我猜你的this.props.dates!==prevProps.dates
条件错误。如果可能的话,您可以比较长度,或者可以尝试类似于JSON.stringify(this.props.dates)!=stringify(prevProps.dates)
Yes。我尝试了在componentdidUpdate方法中进行日志记录。但是它没有给出任何输出。在您的更新中,您将console.log
放在您的条件中。如果条件错误,您将看不到输出。请尝试将其置于此条件之外。是的。我在componentdiddupdate
中添加了console.log(this.props.dates)
,但没有对任何输出进行控制台操作。您的组件也可能未连接到Redux存储。你看过这个吗?
//redux payload actions
const stateActions = (state = initialState, action) => {
switch (action.type) {
case 'UPDATE_DATES':
// state.dates = [...state.dates,...action.payload];
let dates_arr = [...state.dates];
state.dates = [...dates_arr,...action.payload]
return {...state}
}
return state;
}