Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不可变js中.toJS()和.toJSON()哪一个最好?_Javascript_Reactjs_Redux_Immutable.js - Fatal编程技术网

Javascript 在不可变js中.toJS()和.toJSON()哪一个最好?

Javascript 在不可变js中.toJS()和.toJSON()哪一个最好?,javascript,reactjs,redux,immutable.js,Javascript,Reactjs,Redux,Immutable.js,我是React+Redux+Immutable js的新手,我正在使用toJS()将我的不可变数据结构转换为原生javascript形式 Tweet说.toJS()非常昂贵,所以我可以使用toJSON()吗 性能问题可以吗 更新 const initialState = fromJS({ postArr:[] }); const mapStateToProps = (state) => { return{ posts:state.a

我是React+Redux+Immutable js的新手,我正在使用toJS()将我的不可变数据结构转换为原生javascript形式

Tweet说.toJS()非常昂贵,所以我可以使用toJSON()吗 性能问题可以吗

更新

const initialState = fromJS({
   postArr:[]
});

    const mapStateToProps = (state) => {
        return{
            posts:state.allPosts.toJS()
        }
    };
请提供一些例子与我自己的减速机


我如何在不使用to.js()的情况下迭代
这个.props.posts

从以下几方面了解:

  • toJSON()
    返回不可变对象的粗略复制版本(不是JSON字符串,尽管名称可能会有所不同),它只应用于传递给
    JSON.stringify()

  • toJS()
    返回不可变对象的深度复制版本,您随后可以在代码中使用/修改该版本。因为它是一个深度复制的版本,所以生成它的成本更高


好的JS是以编程方式使用的,JSON只是一个字符串。toJS的最佳替代方案并不相同,因为我正在构建一个以移动为中心的网站,在这个网站上,perf matters只在您需要的时候使用toJS。好吧,如果我有100个项目要迭代列表,那么toJS()的最佳使用案例是什么?迭代的目的是什么?Immutable提供了许多可以直接应用于不可变对象的方法(请参阅)。如果您有一个
映射
,您可以使用
for(让您的映射进入){…}
()对其进行迭代。您的初始状态为
postArr
,但
mapstatetrops
是指
状态。allPosts
?我对Redux了解不多,但是你不能直接返回
状态
,并用
{this.props.postArr.map(…)}
对它进行迭代(我在JSX中假设)
?“deep”副本(
toJS()
)实际上会为目标对象结构创建一个“simple”JS对象的新实例,而
toJSON()
只需将对现有JS对象的引用放入目标对象结构中即可。这可能会使“不可变”对象中的内容容易受到更改的影响。但这实际上取决于您的用例,以及它的相关性。