私はtodoのグループをのグループに作成できるTodoアプリケーションを作成しているとします。状態からキーを削除するとレンダリングに問題が発生する
私の状態はそれほどのように構成されている:私はremoveGroup
動作を実現しています
state = {
groups: {
groupName: [todoId],
},
todos: {
ids: [todoId],
byId: {
todoId: todoObj,
},
},
}
。 groups
レデューサーは、指定されたグループ名からすべてtodoId
を選択し、それらをデフォルトグループに移動し、古いグループを削除します。私はその状態を変えていない。
私は3つの反応成分、TodoGroups
,Group
およびTodo
を持っています。
TodoGroups
getGroupNames(state)
セレクタからgroupNames
小道具に基づいて、Group
Sのリストをレンダリングします。Group
が
getGroupTodoIds(state, groupName)
セレクタからtodoIds
小道具に基づいて、getGroupNames
をTodo
のリストをレンダリングするだけObject.keys(state)
を実行し、アルファベット順に指示します。今
、ここに私の問題です:
私はremoveGroup
をトリガーすると、私はtodoIds
小道具が未定義であることをPropType警告が表示されます。その警告は私が今削除したGroup
からのものです。
新しい小道具を受け取る前にTodoGroups
が返される前に、Group
が再レンダリングされます。そのため、古い名前が使用されており、古いグループがもう存在しないため、getGroupTodoIds
はundefined
を返します。
この問題の適切な解決方法を教えてください。 getGroupTodoIds
、mapStateToProps
、さらにはGroup.defaultProps
のいずれかの空の配列に戻りますが、これは間違った方向に進んでいるようです。
グループを削除するときに変更されるキープロパティ(たとえば、key = {state.todos.ids.length})を使用してTodoGroupsの周りにdivを追加すると、削除されたグループの代わりにリスト全体が再描画されます。 –
しかしこれは助けにならないようです。 'TodoGroups'は無効な' Group'の後でもまだレンダリングされます。 – megapctr