admin管理员组文章数量:1435859
I have a ponent with ponentDidMount()
method which gets info from server like this:
ponentDidMount() {
this.getAccount();
}
getAccount = async () => {
try {
this.res = await API.get(`account`, {});
this.props.setData(this.res.data);
} catch (err) {
this.props.history.push(`/add`);
}
}
And I have a reducer which store the info:
const initialState = {}
const accountReducer = (state = initialState, action) => {
if (action.type === 'SET_ACCOUNT_DATA') {
return action.data;
} else {
return state;
}
}
export default accountReducer;
But my ponent doesn't re-render after action performed. Why? My action code is:
export const setData = (data) => {
return {
type: 'SET_ACCOUNT_DATA',
data
}
}
Please help, what am I doing wrong?
UPDATE: My map methods are:
const mapStateToProps = (state) => ({
})
const mapDispatchToProps = (dispatch) => {
return {
setData: (data) => {
return dispatch(setData(data));
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Account);
Mu action import
is correct. Checked.
I have a ponent with ponentDidMount()
method which gets info from server like this:
ponentDidMount() {
this.getAccount();
}
getAccount = async () => {
try {
this.res = await API.get(`account`, {});
this.props.setData(this.res.data);
} catch (err) {
this.props.history.push(`/add`);
}
}
And I have a reducer which store the info:
const initialState = {}
const accountReducer = (state = initialState, action) => {
if (action.type === 'SET_ACCOUNT_DATA') {
return action.data;
} else {
return state;
}
}
export default accountReducer;
But my ponent doesn't re-render after action performed. Why? My action code is:
export const setData = (data) => {
return {
type: 'SET_ACCOUNT_DATA',
data
}
}
Please help, what am I doing wrong?
UPDATE: My map methods are:
const mapStateToProps = (state) => ({
})
const mapDispatchToProps = (dispatch) => {
return {
setData: (data) => {
return dispatch(setData(data));
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Account);
Mu action import
is correct. Checked.
-
can you post how you
connect
the ponent? (and make sure you are using it with a properimport
) – Sagiv b.g Commented Nov 30, 2018 at 9:34 -
reducer
andcontainer
are connected each other? – Julian Commented Nov 30, 2018 at 9:35 -
@Solo if the OP is passing
mapDispatchToProps
in theconnect
(react-redux
) then the dispatch is implicitly injected. but we do need to see how the OP is usingconnect
. if any – Sagiv b.g Commented Nov 30, 2018 at 9:37 - What properties do you have in the state? Is it identical to action.data only? Or is the account data a property in your state only? – weibenfalk Commented Nov 30, 2018 at 9:39
-
3
You are not binding any values in
mapStateToProps
, so there are no changes – Davin Tryon Commented Nov 30, 2018 at 9:42
2 Answers
Reset to default 4In your reducer you probably want to copy origin state and add your changes to it so I think that your reducer should probably looks like:
const accountReducer = (state = initialState, action) => { if (action.type === 'SET_ACCOUNT_DATA') { return {...state, data: action.data}; } else { return state; } }
If your ponent has
mapStateToProps()
, which is returning empty object then the ponent is not going to re-render if there is no props/state change... YourmapStateToProps()
method should maybe look like:const mapStateToProps = state => ({ data: state.yourReducer.yourDataFromStore })
did you check by putting console.log('state:::',state); inside mapStateToProps() ? Is it called again? also can you try this
const accountReducer = (state = initialState, action) => {
if (action.type === 'SET_ACCOUNT_DATA') {
return Object.assign({}, state, {...state, data:action.data });
} else {
return state;
}
}
and in your mapStateToProps
const mapStateToProps = (state)=>({
data: state.reducername.data
})
本文标签: javascriptWhy Redux doesn39t rerender componentStack Overflow
版权声明:本文标题:javascript - Why Redux doesn't re-render component? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745674370a2669761.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论