reactjs - Redux , state.concat 不是 rootReducer 的函数。并被迫重新渲染一个元素以查看状态变化
问题描述
所以我有这个侧边栏组件,我在其中加载我的商店和调度程序
//select
const mapStateToProps = state => {
return { renderedEl: state.renderedEl }
}
function mapDispatchToProps(dispatch) {
return{
renderLayoutElement: element => dispatch(renderLayoutElement(element))
}
}
然后在同一个组件中,这就是我触发调度程序的方式
renderEl = (el) => {
var elementName = el.target.getAttribute('id');
var renderedElements = this.props.renderedEl; //this is data from the store
for (let key in renderedElements) {
if (key == elementName) {
renderedElements[key] = true
}
}
this.props.renderLayoutElement({renderedElements});
}
然后据我了解,它被发送到减速器
import {RENDER_LAYOUT_ELEMENT} from "../constants/action-types"
const initialState = {
renderedEl: {
heimdall: false,
skadi: false,
mercator: false
}
}
function rootReducer(state = initialState, action){
if(action.type === RENDER_LAYOUT_ELEMENT){
return Object.assign({},state,{
renderedEl: state.renderedEl.concat(action.payload)
})
}
return state
}
export default rootReducer;
这是它的动作
import {RENDER_LAYOUT_ELEMENT} from "../constants/action-types"
export function renderLayoutElement(payload) {
return { type: RENDER_LAYOUT_ELEMENT, payload }
};
现在的事情是。我收到一个
state.renderedEl.concat 不是 rootreducer / 调度时的函数
我不明白为什么会这样。
因为,正如我所见,实际上商店已更新,但控制台返回该错误。而且我必须重新加载使用该商店道具的渲染(带有悬停)才能看到更改。它不会像状态一样自动发生
解决方案
if(action.type === RENDER_LAYOUT_ELEMENT){
return { ...state, renderedEl: { ...state.renderedEl, ...action.payload } };
}
重复评论可能对其他人有帮助:)
推荐阅读
- javascript - Babel 7 - ReferenceError: regeneratorRuntime 未定义
- azure - 有人成功使用 azurerm_virtual_machine_extension 启用 VM 诊断吗?
- primeng - Turbo表:如何在PrimeNG表中显示数据?数据值可能包含 Json 对象或 Array
- reactjs - 物化选项卡不使用 React Router 工作
- mysql - parse-server - 导入 mysql 数据
- python - Tkinter GUI - 无法将参数传递给脚本
- java - 我的 MCTS Gomoku 播放器出现 Java 堆空间问题
- c++ - 对类的向量感到困惑:“三巨头”、在 push_back 后删除类和资源管理
- javascript - Javascript 和 Openlayers 未捕获的 TypeError
- html - Angular 6链接到其他组件中的部分?