我有这些文件:
numPadHandler(我的 reducer)、configureStore(我的商店)、TestRedux(我的组件,尝试使用商店)和我的应用程序文件。
减速机:
// store/reducers/numpadReducers/numpadHandler
const initialState = { valueNumPad: "1" }
function numpadHandler(state = initialState, action) {
let nextState;
switch(action.type) {
case 'ADD_DIGIT':
nextState = state;
nextState.valueNumPad = nextState.valueNumPad + action.value;
console.log("reducer new state : " + state.valueNumPad);
return nextState;
default:
return state;
}
}
export default numpadHandler;
店铺 :
// store/configureStore
import { createStore } from 'redux';
import numpadHandler from './reducers/numpadReducers/numpadHandler';
export default createStore(numpadHandler);
零件 :
// components/TestRedux
import React, { useState } from "react";
import { connect } from 'react-redux';
import Button from './Button';
const TestRedux = (props) => {
const handleClick = () => {
console.log("props value numpad : " + props.valueNumPad);
const action = { type: "ADD_DIGIT", value: 5 }
props.dispatch(action);
}
return (
<div>
<Button onClick={handleClick} />
</div>
);
}
const mapStateToProps = (state) => {
console.log("state : " + state.valueNumPad);
return state
}
export default connect(mapStateToProps)(TestRedux);
应用程序 :
//...
render() {
return (
<Provider store={ Store }>
<TestRedux />
</Provider>
);
}
我不明白为什么当我点击按钮时,reducer 的状态正在改变,但函数 mapStateToProps 没有被再次调用。
页面加载后有我的控制台输出:
state : 1
一键后:
props value numpad : 1
reducer new state : 15
两次点击后:
props value numpad : 1
reducer new state : 155
单击 2 次后完成控制台输出:
state : 1
props value numpad : 1
reducer new state : 15
props value numpad : 1
reducer new state : 155
所以你可以看到动作正在发生,reducer 状态正在更新,但组件端没有更新!
你能解释一下为什么吗?
已解决:基于 TLadd 响应的答案:
我的减速器代码是错误的,这是编码的好方法:
case 'ADD_DIGIT':
const nextState = {
...state,
valueNumPad: state.valueNumPad + action.value
};
return nextState