【发布时间】:2019-04-16 11:51:00
【问题描述】:
调度后的动作道具没有改变。我的 redux 容器:
class ConnectedAppContent extends React.Component {
render() {
return (
<div id="content">
<Router>
<Switch>
<PropsRoute path="/login" component={LoginForm} doLogin={this.props.doLogin} />
<PrivateRoute path="/scan" redirectTo="/login" component={Scanner} token={this.props.token} />
<PrivateRoute path="/result" redirectTo="/login" component={ParsedQRCode} token={this.props.token} />
</Switch>
</Router>
</div>
);
}
}
const mapStateToProps = state => {
return {
token: state.token,
parsedQRCode: state.parsedQRCode
}
}
const mapDispatchToProps = dispatch => ({
doLogin: token => dispatch(doLogin(token))
});
export const AppContent = connect(mapStateToProps, mapDispatchToProps)(ConnectedAppContent);
还有主要的App组件,包裹在Provider中:
export class App extends React.Component {
render() {
return (
<div className='container'>
<AppHeader />
<AppContent />
<AppFooter />
</div>
);
}
}
ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>,
document.querySelector('.wrapper')
)
道具更新应该怎么做? Props 与初始状态绑定,但在 doLogin 之后不刷新。
更新
我的减速机:
const initialState = {
token: null
}
export const loginReducer = (state = initialState, action) => {
switch (action.type) {
case DO_LOGIN:
return {...state, token: action.payload}
default:
return state;
}
}
还有doLogin 操作:
export const doLogin = token => ({
type: DO_LOGIN,
payload: token
})
还有PrivateRoute 组件(我从here 得到的):
export const PrivateRoute = ({ component, redirectTo, ...rest }) => {
// rest.token is undefined here, even after dispatching doLogin
return (
<Route {...rest} render={routeProps => {
return !!rest.token ? (
renderMergedProps(component, routeProps, rest)
) : (
<Redirect to={{
pathname: redirectTo,
state: { from: routeProps.location }
}}/>
);
}}/>
);
};
还有PropsRoute(也来自here):
export const PropsRoute = ({ component, ...rest }) => {
return (
<Route {...rest} render={routeProps => {
return renderMergedProps(component, routeProps, rest);
}}/>
);
}
【问题讨论】:
-
请出示doLogin函数和对应的reducer。
-
请分享action的reducer,如果你更新token或者parsedQRCode,组件应该更新
-
@RyanC 请查看更新后的问题
-
@EdwinVargas 更新
-
试试
case DO_LOGIN: { console.log('will this appear?') }
标签: javascript reactjs redux react-redux