Redux, state.concat не является функцией rootReducer. И быть вынужденным изменить элемент для того, чтобы увидеть, как меняется государство - PullRequest
0 голосов
/ 24 апреля 2020

Итак, у меня есть этот компонент боковой панели, куда я загружаю свой магазин и моего диспетчера

    //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 не является функцией rootRuducer / при отправке

Я не понимаю, почему это происходит.

Becuase На самом деле магазин обновляется, как я вижу, но консоль возвращает эту ошибку. И я должен перезагрузить рендер, который использует реквизиты этого хранилища (с указателем поворота), чтобы увидеть изменения. Это не происходит автоматически, как это было бы с состоянием

1 Ответ

1 голос
/ 24 апреля 2020
if(action.type === RENDER_LAYOUT_ELEMENT){
        return { ...state, renderedEl: { ...state.renderedEl, ...action.payload } };
    }

Повторяется из комментариев, может быть, это может быть полезно кому-то еще:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...