Я провел два дня, пытаясь создать редуктор, который изменяет логическое значение для свойства toRecipe, но безуспешно.Это вложенный массив объектов.Я не могу двигаться вперед с этим, это структура массива:
recipes: [
{ id: int,
re: 'string',
c: [
{ id: int,
co: 'string',
toRecipe: false
},
{...}
]
},
{...}
]
Я создал редуктор, как это:
case actionTypes.EDIT_BOOLEAN:
return {
...state,
recipes: {...state.recipes,
[action.payload.idFromRecipe]: {...state.recipes[action.payload.idFromRecipe],
c: {...state.recipes[action.payload.idFromRecipe].c,
[action.payload.idFromComp]: {...state.recipes[action.payload.idFromRecipe].c[action.payload.idFromComp], toRecipe: false}
}
}
}
}
, но когда я использую этот редуктор, у меня появляется ошибка: TypeError:Не удается прочитать свойство 'c' из неопределенного
Я перечисляю этот массив здесь (жирный текст):
class RecipeList extends Component {
render(){
console.log(this.props.recipes.map(recipe=>recipe));
let compons = this.props.recipes.map(recipe =>(
<div key={recipe.id}>
<h2>{recipe.re}</h2>
<ul key={recipe.id}>
{recipe.c.map(comp=> comp.toRecipe === true ?
<li key={comp.id}>{comp.co}</li>
: null
)}
</ul>
<div>
<form>
**{ recipe.c.map((comp, i)=>(
<div key={i}>
<input
onChange={()=>this.props.editRecipes(comp.id,recipe.id)}
type="checkbox"
key={i}
checked={comp.toRecipe}
/>
<label key={comp.id}>{comp.co}</label>
</div>
)) }**
</form>
</div>
</div>
)
);
console.log(compons);
return (
<div>
{compons}
</div>
)
}
}
Может ли кто-нибудь мне помочь?