React-redux组件不会在商店状态更改时重新提交
问题描述:
我在说要今天学习react和redux,但我无法弄清楚如何强制组件在状态更改后重新提交。React-redux组件不会在商店状态更改时重新提交
这里是我的代码:
const store = createStore(loginReducer);
export function logout() { return {type: 'USER_LOGIN'} }
export function logout() { return {type: 'USER_LOGOUT'} }
export function loginReducer(state={isLogged:false}, action) {
switch(action.type) {
case 'USER_LOGIN':
return {isLogged:true};
case 'USER_LOGOUT':
return {isLogged:false};
default:
return state;
}
}
class App extends Component {
lout(){
console.log(store.getState()); //IT SHOW INITIAL STATE
store.dispatch(login());
console.log(store.getState()); //IT SHOWS THAT STATE DID CHANGE
}
////THIS IS THE PROBLEM,
render(){
console.log('rendering')
if(store.getState().isLogged){
return (<MainComponent store={store} />);
}else{
return (
<View style={style.container}>
<Text onPress={this.lout}>
THE FOLLOWING NEVER UPDATE :(!!{store.getState().isLogged?'True':'False'}</Text>
</View>
);
}
}
我可能触发更新的唯一方法是通过使用
store.subscribe(()=>{this.setState({reload:false})});
内部构造,让我手动触发组件的更新状态强制重新呈现。
但我怎样才能连接存储和组件状态?
答
您的组件只在其状态或道具发生更改时才会重新渲染。你不是依靠this.state或this.props,而是直接在你的渲染函数中获取商店的状态。
相反,您应该使用connect
将应用程序状态映射到组件道具。组件例如:
import React, { PropTypes } from 'react';
import { connect } from 'react-redux';
export class App extends React.Component {
constructor(props, context) {
super(props, context);
}
render() {
return (
<div>
{this.props.isLoggedIn ? 'Logged In' : 'Not Logged In'}
</div>
);
}
}
App.propTypes = {
isLoggedIn: PropTypes.bool.isRequired
};
function mapStateToProps(state, ownProps) {
return {
isLoggedIn: state.isLoggedIn
};
}
export default connect(mapStateToProps)(App);
在这个非常简单的例子,如果店里的isLoggedIn值的变化,它会自动更新您的组件上相应的道具,这将导致其呈现。
我建议您阅读反应,终极版的文档,以帮助您开始: http://redux.js.org/docs/basics/UsageWithReact.html
是'使用'连接()'需要App.propTypes'?看起来你只是把它扔在那里。 –
非常感谢你! –