【问题标题】:React-Native Navigation Experimental(NavigationStateUtils), purpose of using a slice?React-Native Navigation Experimental(NavigationStateUtils),使用切片的目的?
【发布时间】:2016-11-19 23:43:38
【问题描述】:

NavigationStateUtils.js 上的 React-Native 导航实验,

在这里使用 Slice 的目的是什么,因为即使不使用 slice(),它也会返回完全相同的路由数组。

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

或者只是为了和pop保持一致。

【问题讨论】:

    标签: javascript arrays facebook navigation react-native


    【解决方案1】:

    目的大概是在修改state.routes数组之前创建一个副本,以免改变state.routes引用的原始数组。保持数据结构不可变(通过制作您修改的副本,而不是修改原始数据)可以帮助避免在数组/对象/等时出现意外错误。由代码的其他部分修改。这是函数式编程中常用的原则,也是 React 普遍遵循的范式。

    【讨论】:

    • 感谢详细解释@lt1。我了解不变性部分,但是 const routes = state.routes.slice();与 const routes = state.routes 不同?
    • 新数组是浅拷贝
    • 如果我们使用const routes = state.routes,这并不明显,但我们并没有创建state.routes 数组的副本——您只是创建了一个实际上仍然存在的新变量routes引用内存中与state.routes 相同的底层数组。有关更多解释,您可以查看 pass by valuepass by reference 的概念。您必须使用 .slice() 之类的东西来实际创建底层数组的副本,然后再将其分配给新变量。
    • 太棒了。 !现在我明白了。
    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 2016-07-25
    • 2016-12-18
    • 2018-10-27
    • 2017-06-21
    • 1970-01-01
    • 2017-01-04
    • 2023-02-10
    相关资源
    最近更新 更多