У меня есть приложение Redux, что, помимо всего прочего, обновляет одну строку, следовательно, государство может быть отражено как:Redux создает состояние с двойным вложенности
{
theDataString: "someString",
otherData: { ...some other data... },
someListItems: [ ...a data array... ]
}
Поэтому у меня есть следующий редуктор:
function updateDataString(state = {}, action) {
switch (action.type) {
case UPDATE_DATA_STRING:
return Object.assign({}, ...state, {theDataString: action.theDataString});
default:
return state;
}
}
Однако при отправке в UPDATE_DATA_STRING
действия, значение theDataString
в состоянии становится двойным вложенным:
{
theDataString: {theDataString: "someString"},
otherData: {... some other data... },
someListItems: [ ... a data array ... ]
}
С этой же проблемой уже столкнулись here. Однако решение для них состояло в том, что они вызывали combineReducers
на одном редукторе, когда это было необязательно. В моем случае я звоню combineReducers
на несколько редукторов - поэтому их ответ не работает для меня. Также обратите внимание, что одна и та же проблема вложенности не возникает для других данных, только строка верхнего уровня получает двойное вложение.
Что здесь общего не работает?
EDIT: Я подключить компонент, который обновляет theDataString
так:
import {connect} from 'react-redux';
import {updateDataString} from './actions/actions';
import SomeList from './components/someList';
const mapStateToProps = (state) => {
return {someListItems: state.someListItems}
};
const mapDispatchToProps = (dispatch, placeHolder) => {
return {
updateDataString: (aString) => dispatch(updateDataSting(aString))
}
};
export default SomeListConnected = connect(mapStateToProps, mapDispatchToProps)(SomeList)
Действие происходит следующим образом:
export const UPDATE_DATA_STRING = 'UPDATE_DATA_STRING';
export function updateDataString(aString) {
return {type: UPDATE_DATA_STRING, theDataString: aString}
}
EDIT2: Изменение способа обновления редуктора государство - это естественное место для поиска ответов. Однако я пробовал различные перестановки здесь с небольшим эффектом:
Object.assign({}, ...state, {theDataString: action.theDataString});
Object.assign({}, state, {theDataString: action.theDataString});
{...state, {theDataString: action.theDataString}};
Ничего из этого не исправить.
Как вы подключаете свой компонент к Redux? –
BTW Ваше действие не имеет 'newString' в качестве полезной нагрузки. Это похоже на 'return {type: UPDATE_DATA_STRING, theDataString: aString}'. –
@JyothiBabuAraja, спасибо, исправлено.(Исходный код не содержит этой ошибки) – Logister