プロジェクト(todolistの)で、削除がimmutable
ライブラリ、source hereその店
ストア構造で作成された後にコンポーネントがアンマウントされていません:project
はReduxの店では、多くのtasks
を持っている:State
- 地図、projects, tasks
- レコード
私はasynclyプロジェクトを削除すると...
export const removeProject = project => (dispatch) => {
if (!isProjectExist(project)) return Promise.resolve()
return projectService
.delete(project)
.then(
() => {
dispatch(remove(project))
console.log("post removeProject resolved")
},
handleError,
)
}
....それは、初期化後に作成された - それは削除され、適切にされますアンマウント、しかしときに、プロジェクトがinitialState
として渡された - それは見え絵のように
、古いデータで自身をレンダリングしようとすると、失敗ProjectItem
ProjectList
が再レンダリングされず、私はimmutablejsを使用していましたが、以前はnormalizr-immutable
を使用していましたが、このライブラリの問題の原因と考えて、normalizeInitialState
(source)と書いてありました。トンredux-immutable
に問題の多分ソースは私は、これは私たちが解決できるものではないと思います
この問題の解決に一日苦戦しました。反応状態の変更は 非同期であり、Reactはそれらをバッチする(またはしない)ことがあります。したがって、「削除」を押すと の瞬間、Reduxストアの更新が行われ、Itemと Appの両方が新しい状態を受信します。 App状態が変更されても、アイテムのマウントが解除されても、mapStateToPropsよりも遅れて発生するアイテムは です。
私が間違っていない限り、私たちは何もできません。次の2つのオプションがあります。
すべての必要な状態をApp(またはItemListなどの下位レベル)レベル にリクエストし、「ダム」アイテムに渡します。 "現在アンマウント中"の状態のために、mapStateToProps にセーフガードを追加してください。たとえば、この場合レンダーからnull を返すことがあります。 MapStateToProps がヌルを返した場合、connect()によって生成されたコンポーネント がレンダリングからnullを返す可能性があります。これは意味をなさないでしょうか?これはあまりにも驚くべきことですか?
フム、私は他人のコードにmapStateToPropsでreturn (<div></div>)
やセーフガードのようなスタブを見たことがない