[英]react redux re-render not triggered by state-change
我开始学习 react 和 react-redux,但我无法理解组件或容器如何知道状态更改并重新渲染。 我尝试了一个简单的示例,但无法让它按应有的方式工作。 我想要做的是显示一个计数器和一个按钮。 每次单击按钮时,计数器都应增加。 按钮单击调度一个动作并且状态改变,但不知何故计数器没有显示在屏幕上。 它甚至没有用 0 计数器显示初始状态。 我对前端开发也很陌生,所以也许它与 redux 无关,而是与 react 无关。
这是我的index.js
import store from "./store/configureStore"
render(
<Provider store={store}>
<Countercont></Countercont>
</Provider>
, document.getElementById('root'));
配置Store.js
import {combineReducers, createStore} from 'redux'
import counterReducer from "./modules/counter"
const reducer = combineReducers({
tmp: counterReducer });
const configureStore = createStore(reducer)
export default configureStore;
我的计数器.js
const Mycounter = ({counter, inc}) => (
<div>
<p>"counter"</p>
<p>{counter}</p>
<Button onClick={inc}>Inc</Button>
</div>
)
export default Mycounter
countercont.js容器组件
const Countercont = ({counter, inc}) => {
return (
<div>
<Mycounter counter={counter} inc={inc}/>
</div>
)
}
const mapStateToProps = state => {
return {counter: state.counter};
};
const mapDispatchToProps = dispatch => {
return {inc: () => dispatch(inc())}
};
export default connect(mapStateToProps, mapDispatchToProps)(Countercont);
counter.js的 action 和 reducer
export default function reducer(state = {counter: 0}, action) {
console.log(state) //-> shows the correct state
switch (action.type) {
case "c":
console.log("Inc")
return {...state, counter: state.counter + 1}
default:
return state
}
}
export function inc() {
return {type: "c"}
}
您在counterReducer
中定义的计数器状态是针对tmp
密钥注册的
const reducer = combineReducers({
tmp: counterReducer
});
因此,为了获得该值,您的组件mapStateToProps
回调应使用代码中的tmp
减速器键从整个状态中获取该值
所以它应该像
const mapStateToProps = state => {
return {counter: state.tmp.counter};
};
代替
const mapStateToProps = state => {
return {counter: state.counter};
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.