Javascript 为什么Redux没有';重新渲染组件?
我有一个具有Javascript 为什么Redux没有';重新渲染组件?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个具有componentDidMount()方法的组件,它从服务器获取如下信息: componentDidMount() { this.getAccount(); } getAccount = async () => { try { this.res = await API.get(`account`, {}); this.props.setData(this.res.data); } catch (err) {
componentDidMount()
方法的组件,它从服务器获取如下信息:
componentDidMount() {
this.getAccount();
}
getAccount = async () => {
try {
this.res = await API.get(`account`, {});
this.props.setData(this.res.data);
} catch (err) {
this.props.history.push(`/add`);
}
}
我有一个存储信息的减速机:
const initialState = {}
const accountReducer = (state = initialState, action) => {
if (action.type === 'SET_ACCOUNT_DATA') {
return action.data;
} else {
return state;
}
}
export default accountReducer;
但我的组件在执行操作后不会重新渲染。为什么?
我的行动代码是:
export const setData = (data) => {
return {
type: 'SET_ACCOUNT_DATA',
data
}
}
请帮忙,我做错了什么
更新:
我的地图方法是:
const mapStateToProps = (state) => ({
})
const mapDispatchToProps = (dispatch) => {
return {
setData: (data) => {
return dispatch(setData(data));
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Account);
Mu操作导入
正确。检查过了
const accountReducer = (state = initialState, action) => {
if (action.type === 'SET_ACCOUNT_DATA') {
return {...state, data: action.data};
} else {
return state;
}
}
mapStateToProps()
,并且返回空对象,则如果没有道具/状态更改,组件将不会重新渲染。。。您的MapStateTrops()
方法可能如下所示:
const mapStateToProps = state => ({
data: state.yourReducer.yourDataFromStore
})
是否通过放置console.log('state::',state)进行检查;在MapStateTops()中?又叫了吗? 你也能试试这个吗
const accountReducer = (state = initialState, action) => {
if (action.type === 'SET_ACCOUNT_DATA') {
return Object.assign({}, state, {...state, data:action.data });
} else {
return state;
}
}
在你的地图上
const mapStateToProps = (state)=>({
data: state.reducername.data
})
你能告诉我你是如何连接组件的吗?(并确保将其与适当的
导入一起使用)减速机
和容器
相互连接?@Solo如果OP在连接
中通过mapDispatchToProps
(react-redux
),则隐式注入调度。但我们确实需要了解OP是如何使用connect
的。如果有的话,你在这个州有什么财产?是否仅与action.data相同?或者帐户数据只是您所在州的一个属性?您没有在MapStateTrops
中绑定任何值,因此没有任何更改。第二个是答案。还要感谢@Davin tryon谢谢!但是第一个是在使用redux:D时必须具备的:如果您像以前那样编写减缩器,那么每次都会删除整个存储,减缩器只返回一个新值,而不返回原始状态的数据:/Yes,我会修复它。这些是为了简单起见,以表明我从最初的状态就有了全新的状态。