这是我的减速器代码
const authReducer = (
state = {
isAuthenticated: !AuthService.isTokenExpired(),
isFetching: false,
profile: AuthService.getProfile(),
error: null
},
action
) => {
switch (action.type) {
case types.LOGOUT_SUCCESS:
return Object.assign({}, state, {
isAuthenticated: false,
isFetching: false,
profile: {},
error: null
})
default:
return state;
}
export default combineReducers({
apiDataReducer,
auth: authReducer
});
import rootReducer from './reducers/combineReducers';
import reduxImmutableStateInvariant from 'redux-immutable-state-invariant';
imp
ort thunk from 'redux-thunk';
const middleware = process.env.NODE_ENV !== 'production' ? [reduxImmutableStateInvariant(), thunk] : [thunk];
export let store = createStore(rootReducer, applyMiddleware(...middleware));
render(
<Provider store={store}>
<Router>
<App />
</Router>
</Provider>,
document.getElementById('root')
);
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
import * as authActions from '../../actions/basicActions';
import HeaderView from './HeaderView';
//import authReducer from './reducers/authReducer';
const mapStateToProps = ({ auth }) => ({
auth
});
const mapDispatchToProps = dispatch => ({
loginRequest: () => dispatch(authActions.loginRequest()),
logoutSuccess: () => dispatch(authActions.logoutSuccess())
});
export default withRouter(
connect(mapStateToProps, mapDispatchToProps)(HeaderView)
);
handleLogoutClick = () => {
this.props.logoutSuccess();
this.props.history.push({ pathname: '/' });
};
render() {
const { auth } = this.props;
return (
<div>
{auth.isAuthenticated ? (
<div>
<div>
<table>
<tbody>
<label>
<aonClick={this.handleLogoutClick}> Log Out </a>
</label>
</td>
</tr>
</tbody>
</table>
</div>
<nav className="navbar navbar-default">
<ul className="nav navbar-nav">
<li key="1" id="1" onClick={this.handleClick}><Link to={'/page2'}>page2</Link></li>
</ul>
</nav>
</div>
) : (
<label className="Note">
logged in{' '} <a onClick={this.handleLoginClick}> Log In </a>
{' '} to continue.
</label>
)}
</div>
);
}
这是我的容器组件,其中reducer auth中的状态变化没有反映SomeContainer.js
const mapStateToProps = ({ auth }) => ({
auth
});
const mapDispatchToProps = dispatch => ({
});
export default connect(mapStateToProps, mapDispatchToProps)(SomeContainer);
当在HeaderView.js中单击LOGOUTSUCCESS操作时,会调用LOGOUTSUCCESS操作,并且reducer'auth'更改了object中“is authenticated”的值,但该更改不会调用连接容器的“map stateToProps”函数,即使在注销之后,reducer'auth'的值也是相同的,即true。
因为当从父组件发生道具
更改时,子组件不会重新呈现。您可以将connect
HoC视为HeaderView组件的父级。有关重新呈现条件的更多信息,请检查此问题。
您需要使用ComponentWillReceiveProps
更改状态
。在HeaderView.js文件中:
constructor(props) {
super(props);
this.state = {
isAuthenticated = false
}
}
componentWillReceiveProps(nextProps) {
if(nextProps.auth.isAuthenticated !== this.props.auth.isAuthenticated) {
this.setState({isAuthenticated: nextProps.auth.isAuthenticated});
}
}
handleLogoutClick = () => {
this.props.logoutSuccess();
this.props.history.push({ pathname: '/' });
};
render() {
const { isAuthenticated } = this.state;
return (
<div>
{isAuthenticated ? (
<div>
<div>
<table>
<tbody>
<label>
<aonClick={this.handleLogoutClick}> Log Out </a>
</label>
</td>
</tr>
</tbody>
</table>
</div>
<nav className="navbar navbar-default">
<ul className="nav navbar-nav">
<li key="1" id="1" onClick={this.handleClick}><Link to={'/page2'}>page2</Link></li>
</ul>
</nav>
</div>
) : (
<label className="Note">
logged in{' '} <a onClick={this.handleLoginClick}> Log In </a>
{' '} to continue.
</label>
)}
</div>
);
}
我正在尝试使用React Redux。我遇到了这样一种情况:一个连接的组件(Coordinates.jsx)嵌套在另一个连接的组件(Canvas.jsx)中。 源代码https://github.com/RinatRezyapov/Vault-13.git(纱线安装,然后纱线开始) 在父组件画布中。jsx I在componentDidMount()中调度一个操作,该操作不可变地更改状态。 帆布js
问题内容: 我要说的是今天要学习react和redux,但是我不知道如何在状态更改后强制组件重新渲染。 这是我的代码: 我可以触发更新的唯一方法是使用 在构造函数内部,以便我手动触发组件的更新状态以强制重新渲染。 但是如何链接存储状态和组件状态? 问题答案: 仅当组件的状态或道具发生更改时,组件才会重新渲染。您不是依靠this.state或this.props,而是直接在render函数中获取存储
本文向大家介绍AngularJS改变元素显示状态,包括了AngularJS改变元素显示状态的使用技巧和注意事项,需要的朋友参考一下 前言 本文描述使用AngularJS提供的ng-show和ng-hide指令实现自动监听某布尔型变量来改变元素显示状态。 控制html元素显示和隐藏有n种方法:html的hidden、css的display、jQuery的hide()和show()、bootstrap
我有一个基于url的react组件,它应该导入一些数据,然后在另一个子组件中显示。当页面首次加载时,它将初始数据作为组件状态加载到中。至于进一步的url更改,它们将在export default class Info()中处理。组成部分{ 我的问题是,尽管switch语句中有状态更新,但组件不会重新渲染。我不知道我的方法有什么问题。有人能帮我吗?谢谢 编辑:这是使用而不是的代码:
我有一个组件连接到我的商店。该组件发送操作并正确更改状态(请参阅日志)。但我的组件应该显示此状态更改。但它不会重播。 下面是我的代码: 最后,我的组件希望在状态更改后更新state和rerender: 这样您就可以看到状态正确地改变了。但在此之后,我希望组件再次呈现(控制台和文本标记中的“rendering...”显示true而不是false) 我看不出有什么错误。你能帮帮我吗?
状态保存在MyPayments组件中(它是本地状态--尽管您可以看到连接的组件,但我几乎不使用Redux)。 它具有以下结构: 数组作为道具传递给子组件(连接的)-您可以在上面的屏幕截图中看到它。我认为连接的组件将它进一步传递到组件。但是...