在测试新创建的动作和减速器时遇到了这个问题。即使我在reducer中将其设置为固定值,Prop也不会被更新。这是我在测试中执行的代码。
组件:
class <ComponentName> extends Component {
componentDidMount() {
login()
}
render() {
if(this.props.isLogged)
return (
<App/>
);
else
return (
<ErrorScreen/>
);
}
}
function mapStateToProps(state) {
return {
isLogged:state.auth.isLogged
}
}
const mapDispatchToProps = (dispatch) => {
return {
login: () => dispatch(login())
};
};
export default connect(mapStateToProps,mapDispatchToProps)(<ComponentName>)
操作:
export function login() {
return {
type:"TEST"
}
}
减速器:
const initState = {
isLogged: false,
}
export default (state=initState, action) => {
switch(action.type) {
case "TEST":
return {
...state,
isLogged: true
}
break;
default:
return state
}
}
组合减速器:
import {combineReducers} from 'redux'
import AuthenticationReducer from './authenticationReducer'
export default combineReducers({
auth: AuthenticationReducer
})
提供者:
import React, {Component} from "react";
import <ComponentName> from './app/screens/<ComponentName>'
import store from './app/store'
import {Provider} from 'react-redux'
export default () =>
<Provider store={store}>
<<ComponentName>/>
</Provider>;
现在尝试调试几个小时。我完全不知道为什么会这样。也许我执行错误?我不知道了如果有些文件我忘了包括在内,请通知我。感谢,并有一个愉快的一天!
答案 0 :(得分:3)
代码无法按预期运行的原因是因为您正在调用login()
动作创建者,而不是从login()
返回(并注入到{{1}的mapDispatchToProps()
)。
尝试通过在调用props
之前添加<ComponentName/>
来修改代码,如下所示:
this.props