我是个新来的react 者,试图掌握语法.

我正在React 15环境中开发(使用React starterify模板),并且一直在使用下面版本2中的语法,但是,我在Facebook的React页面中找到的大多数示例和教程都是版本1.这两者有什么区别?什么时候我应该使用这一个而不是另一个?

VERSION 1

var MyComponent = React.createClass({
  render: function() {
    return (
      <ul>
        // some list
      </ul>
    );
  }
});

module.exports = MyOtherComponent;

VERSION 2

const MyComponent = () => (
  <ul>
    // some list
  </ul>
);

export default MyComponent;

推荐答案

第二个代码是stateless functional component,是一种新的语法/模式,用于将组件定义为props的函数.它是在React v0中引入的.14

你可以在React官方博客here和React官方文档here上了解更多信息.

这些组件的行为就像只有渲染的React类

此模式旨在鼓励创建这些简单的


  • 有什么区别?

    这种模式与"传统"模式类似,只是您使用的是简单函数,而不是类中定义的方法.当您想要从类中提取函数时(例如为了可读性和清洁度),这可能很有用.

    需要注意的一件重要事情是,一个功能组件就是一个function.这不是一门课.因此,不存在全局this对象.这意味着,当你在做render时,你基本上是在创建ReactComponent的一个新实例,从而排除了这些javascript对象通过一些全局this相互通信的可能性.这也使得state和任何生命周期方法的使用成为不可能.


  • 我的应用程序如何从中受益?

    Performance

    Adaptability

    使用React的无状态功能组件,每个组件都可以轻松地进行隔离测试.不需要模拟、状态操纵、特殊库或复杂的测试工具.

    Encourages best practices


  • 我什么时候应该用这个而不是另一个?

    通常,只要可能,建议使用新模式!如果您只需要render个方法,但不需要生命周期方法或state个方法,请使用此模式.当然,有时你需要使用state,在这种情况下,你可以使用传统的模式.

    Facebook建议在呈现静态呈现组件时使用无状态组件.然后,如果需要某种状态,只需将它们包装在有状态组件中,使用其'state并向下发送props到无状态组件来管理它们.

React-native相关问答推荐

AxiosError:Reaction Native EXPO开发版本中的网络错误

在原生react 中更改图像源URI时闪烁

Firebase身份验证Redux使用说明

根据搜索字符串中的每个字母过滤数组

React Native 开发中的/ios/index/DataStore文件夹是什么

用于 React-Native 开发的 Visual Studio Code 中的自动导入

@react-navigation/stack 与 @react-navigation/native-stack 有什么区别?

React-Native: measure测量一个视图

React Native 使视图 Hug键盘顶部

组件div的视图配置 getter 回调必须是一个函数(收到 undefined)

SyntaxError:Strict mode does not allow function declarations in a lexically nested statement on a newly created app

有react-native复选框的例子吗?

如何在react-native矢量图标中从多个文件导入图标?

如何在本地构建 Expo APK

仅链接字体的方法

如何从 React-Native 中的另一个类调用函数?

WebStorm + ReactNative?

React Native Build Error on IOS - typedef 用不同类型重新定义('uint8_t'(又名'unsigned char')与'enum clockid_t')

降级 react-native 的适当机制

保存时 Visual Studio 代码格式化失败