哪种方式更好地将对象传递给 React Native 中的转储组件?

Posted

技术标签:

【中文标题】哪种方式更好地将对象传递给 React Native 中的转储组件?【英文标题】:Which way better to pass object to a Dump Component in React Native? 【发布时间】:2018-05-11 17:31:46 【问题描述】:

假设我有一个转储组件,用于显示用户信息。 将用户信息传递给组件有两种方式:

1):

class UserItem extends PureComponent 
    // pass user's properties
    const 
        userName, userEmail,
     = this.props;
    // same
    render() 
        return (
            <View>
                <Text>userName</Text>
                <Text>userEmail</Text>
            </View>
        );
    

2):

class UserItem extends PureComponent 
    // pass a user object
    const 
        userName, userEmail,
     = this.props.user;
    // same
    render() 
        return (
            <View>
                <Text>userName</Text>
                <Text>userEmail</Text>
            </View>
        );
    

那么我应该使用哪种方式?我将以两种方式列出我所知道的一些利弊:

1)

优点:

逻辑很容易理解,没有什么“神奇”的事情发生,无论你传入什么组件都会显示。

可以通过浅层比较状态和道具 (https://reactjs.org/docs/shallow-compare.html) 使用 PureComponent 的强大功能,以便组件仅在需要时重新渲染

缺点:

我必须输入很多参数传递,比如&lt;UserItem userName=user.name userEmail=user.email&gt;(除非你使用扩展运算符...user,但你会传递所有对象属性)

我不能在组件内使用对象方法。例如,我的 User 模型有一个方法 user.totalMoneys(),因为我的对象中有一些惰性计算属性。

2)

优点:

通过看起来很简单:&lt;UserItem user=user&gt;

可以在UserItem中使用对象方法

缺点:

我不能使用 PureComponent 的好处,我必须自己比较,

【问题讨论】:

【参考方案1】:

我最好是 1,我经常看到用于此的扩展运算符,顺便说一句,您可以在父级中执行此操作以避免传递无用的道具:

class UserParent extends Component 
    const  uselessProp1, uselessProp2, ...usefullProps  = this.props;
    render() 
        return (
            <View>
                <UserItem ...usefullProps />
            </View>
        );
    

【讨论】:

感谢 Dyo,这是删除多余道具的一种非常聪明的方法。其实,我比较这两种方式的原因是我来自OOP背景,传递整个User对象非常方便(因为在User中,我还定义了一些方法,计算属性等)我只是想知道还有另一种方式组织我的用户的方法,计算的属性?例如我可能有fullname 方法返回lastname + firstname 它适用于对象方法,您可以在 PureComponent 中调用它:&lt;Text&gt; this.props.fullname() &lt;/Text&gt; 但您需要访问此函数中使用的道具(在这种情况下您也必须传递姓氏和名字道具) 是的,我想我也可以传递函数。但是在 OOP 中,我通常有一些像这样的惰性计算属性: gist.github.com/tranquan/4d7744f2807cf6fe8457461263109b36 ,所以 mCreateTimeMoment 仅在需要时创建。我想知道我可以在 FP 中做些什么,或者通过 object props 而不是整个 object。谢谢 Dyo 我认为如果您在使用它的文件中导入所需的模块(moment.js),您的 func 会正常工作。

以上是关于哪种方式更好地将对象传递给 React Native 中的转储组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过NodeJS将对象传递给前端

Rails,将对象传递给邮件程序

显示时将对象传递给模态

使用 v-for 将对象传递给组件

将对象传递给自定义选民?

如何将对象传递给 innerHTML (JavaScript) 中的函数?