2016-11-19 5 views
0

ネイティブナビゲーションNavigationStateUtils.jsでの実験、リアクションネイティブナビゲーション実験(NavigationStateUtils)、スライスを使用する目的は?

スライスを使用する理由は、slice()が使用されていなくても同じ正確なルート配列を返すためです。

enter image description here

https://github.com/facebook/react-native/blob/9ee815f6b52e0c2417c04e5a05e1e31df26daed2/Libraries/NavigationExperimental/NavigationStateUtils.js#L66

それとも、ポップと一致するようにただそこにあります。

enter image description here

答えて

2

目的はstate.routesによって参照元の配列を変異させないように、それを変更する前にstate.routes配列のコピーを作成することはおそらくです。データ構造を変更不可能に保つ(オリジナルを変更するのではなく、変更したコピーを作成することによって)、配列/オブジェクト/などの予期しないバグを避けることができます。コードの他の部分によって変更されます。これは、関数型プログラミングで一般的に使用される原則であり、Reactが一般的に守っているパラダイムです。

+0

ありがとうございます説明@ lt1。私は不変部分を理解していますが、const routes = state.routes.slice(); const routes = state.routesとは異なりますか? – Vkrm

+0

新しい配列は浅いコピーです – Jan

+0

'const routes = state.routes'を実行すると明らかではありませんが、' state.routes'配列のコピーを作成していません。変数 'routes'は実際には' state.routes'と同じメモリ内の同じ配列を参照しています。その詳細な説明については、 'pass by value'と' pass by reference'の概念を調べることができます。新しい変数に割り当てる前に、 '.slice()'のようなものを使って配列のコピーを実際に作成する必要があります。 – lt1

関連する問題