Я новичок в react-redux.
const initialState = {
Low: [
{
id: 0,
type: '',
count: '',
allowded: 6,
level: 'EASY'
}
],
Medium: [
{
id: 0,
type: '',
count: '',
allowded: 7,
level: 'MEDIUM'
}
],
High: [
{
id: 0,
type: '',
count: '',
allowded: 7,
level: 'TOUGH'
}
]
}
Это значение моего начального состояния.
После этого ,
onChange(event, tobeupdated, id, type, noc, data) {
let newData = { ...this.props.data };
if (newData) {
let data = newData[type].map((object, index) => {
if (object.id === id) {
object[tobeupdated] = event.target.value;
const tobeData = newData[type];
this.props.updateLowLevel({tobeData, type}).then(() => {
let criteria_filled = this.disableAddbutton({ ...this.props.data }, type);
addedRow = `new${type}RowAdded`;
this.setState({
[addedRow]: criteria_filled ? true : false
})
});
}
Таким образом я обновляю значения объекта. а затем заменить весь объект.
return (dispatch) => {
dispatch({
type: QUIZ_DATA,
data: tobeUpdated,
});
return Promise.resolve();
}
}
В моем редукторе
case QUIZ_DATA:
return {
...state,
[action.data.type]: [action.data.tobeData],
error: false,
}
Итак, вот что происходит, когда я меняю, скажем, type, а затем он добавляет этот массив объектов в качестве дочерних к предыдущему массиву. поэтому его добавляется столько, сколько вы добавляете.
ТАК, из-за этого я не могу получить этот рендеринг должным образом.
Этот способ добавляется. Итак, как я могу это сделать?
Может ли кто-нибудь управлять мной этим?
данные = [... состояние]; После этого данные не получают фактические данные, они не определены.
не могли бы вы опубликовать полный код редуктора? я имею в виду сверху вниз. Я хочу посмотреть, как вы справлялись с состоянием в начале



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте это как редуктор. Он распространяет содержимое tobeData на массив.
case QUIZ_DATA:
return {
...state,
[action.data.type]: [...action.data.tobeData], // the difference is here
error: false,
}
Здесь, чтобы отправить этот объект, я должен взять const newData = {... this.props.data}
Я вас не очень понимаю. Вы как редуктор пробовали? Я думаю, это приведет к желаемой структуре данных.
Я добавил комментарий к разнице. Вы в основном помещаете массив в массив. В моем решении массив копируется в массив с помощью оператора распространения (...).
Одна вещь заключается в том, почему, когда я пытаюсь сбросить его, значение начального состояния всегда остается заполненным значением, а не сбросом в исходное состояние
Думаю, я ответил на твой вопрос. Если вам это нравится, пожалуйста, примите это. А если у вас есть дополнительные вопросы, добавьте их в отдельный вопрос с дополнительным кодом, если необходимо.
Если у вас есть время, не могли бы вы проверить это
Примите и проголосуйте за ответы, если это решит вашу проблему, пожалуйста. Вы не приняли ни одного ответа за последние пару месяцев, если я посмотрю на вашу страницу. Если вы не награждаете людей, которые помогают вам, почему вы ждете от них помощи. Прочтите, пожалуйста, эту статью Справочного центра: stackoverflow.com/help/someone-answers
[action.data.type]: [...action.data.tobeData],
Данные, которые вы передаете через action.data.tobeData(eg: [1,2,3]), являются самим массивом.
Итак, когда вы используете [action.data.type]: [action.data.tobeData], это создаст массив массива [[1, 2, 3]].
Вы можете использовать [action.data.type]: [...action.data.tobeData], это называется оператором распространения, все, что он делает, это в основном копирует весь element внутри action.data.tobeData и разносит его.
Вы можете обратиться к этому документу Синтаксис распространения
на этот раз попробуйте создать локальную переменную в reducer и сделайте что-то вроде:
case QUIZ_DATA: {let data; data = [...state]; data.data.type = action.data.tobeData; return data}