美文网首页
ReactNative的函数组件与类组件、Component 与

ReactNative的函数组件与类组件、Component 与

作者: JoelLin | 来源:发表于2020-03-22 22:37 被阅读0次

一、组件
1.函数组件
如果你想写的组件只包含一个 render 方法,并且不包含 state,那么使用函数组件就会更简单。我们不需要定义一个继承于 React.Component 的类,我们可以定义一个函数,这个函数接收 props 作为参数,然后返回需要渲染的元素。它也称为无状态组价。

function Square(props) {
  return (
    <Button className="square" onClick={props.onClick}>
    {props.value}
    </Button>
  );
}

2.类组件
定义类组件,需要实例化,一般都继承React.Component 的类,具有组件的生命周期方法,属性 props 是外界传递过来的,状态 state 是组件本身的,状态可以在组件中任意修改,组件的属性和状态改变都会更新视图。

class SimpleComponent extends React.Component {
    constructor(props) {
        super(props);
        // 设置 initial state
        this.state = {
         };
    }
    componentDidMount() {

    }
    render() {
        return (
            <View>
            </View>
     )
  }
}

3.类组件与函数组件的区别

区别 函数组件 类组件
是否有 this 没有
是否有生命周期 没有
是否有状态 state 没有

二、 React.Component
先上代码:

class CounterButton extends React.Component {

  shouldComponentUpdate(nextProps, nextState) {
    if (this.props.color !== nextProps.color) {
      return true;
    }
    if (this.state.count !== nextState.count) {
      return true;
    }
    return false;
  }
}

shouldComponentUpdate 仅检查了 props.color 或 state.count 是否改变。如果这些值没有改变,那么这个组件不会更新

三、 PureComponent
如果你的组件更复杂一些,你可以使用类似“浅比较”的模式来检查 props 和 state 中所有的字段,以此来决定是否组件需要更新。React 已经提供了一位好帮手来帮你实现这种常见的模式 - 你只要继承 React.PureComponent 就行了。

class CounterButton extends React.PureComponent {}

大部分情况下,你可以使用 React.PureComponent 来代替手写 shouldComponentUpdate。但它只进行浅比较 (例如:1 == 1或者ture==true,数组和对象引用是否相同),所以当 props 或者 state 某种程度是可变的话,浅比较会有遗漏,那你就不能使用它了。
不要在props和state中改变对象和数组,如果你在你的父组件中改变对象,你的PureComponent将不会更新。虽然值已经被改变,但是子组件比较的是之前props的引用是否相同,所以不会检测到不同。
因此,你可以通过使用es6的assign方法或者数组的扩展运算符或者使用第三方库,强制返回一个新的对象。
当数据结构很复杂时,情况会变得麻烦,存在性能问题。
(比较原始值和对象引用是低耗时操作。如果你有一列子对象并且其中一个子对象更新,对它们的props和state进行检查要比重新渲染每一个子节点要快的多。)
四、 何时使用Component 或 PureComponent ?
<1> 当组件是独立的,组件在页面中的个数为1或2的,组件有很多props、state,并且当中还有些是数组和对象的,组件需要每次都渲染的,使用Component
<2> 当组件经常作为子组件,作为列表,组件在页面中数量众多,组件props, state属性少,并且属性中基本没有数组和对象,组件不需要每次都渲染,只有变化了才渲染,使用PureComponent

粗略总结,觉得有用或喜欢的就点个赞呗~

相关文章

  • React函数组件与类组件

    函数组件与类组件 GitHub地址 函数组件与类组件函数组件(functional component)类组件(c...

  • ReactNative的函数组件与类组件、Component 与

    一、组件1.函数组件如果你想写的组件只包含一个 render 方法,并且不包含 state,那么使用函数组件就会更...

  • 2020 动手写个 react (3)

    组件 组件可能是函数还可能是类,我们知道只要继承 Component 类就是 react 的组件。 创建一个函数,...

  • React 组件

    分类 按照定义组件的方式分为:函数组件(Functional Component)和类组件(Class Compo...

  • react项目的基础方法详解

    组件创建(Component) 1、函数式 组件无状态组件,没有生命周期,只是一个返回react元素的函数 2、类...

  • React Native 基础知识总结

    Component Component:组件,使用extends React.Component创建的类为组件。?...

  • 组件创建三种方式的区别

    创建组件createClass 工厂方法,继承 React.Component与 无状态函数式组件(第三者与前2者...

  • React Hooks 实现和由来以及解决的问题

    与React类组件相比,React函数式组件究竟有何不同? 一般的回答都是: 类组件比函数式组件多了更多的特性,比...

  • 今日总结

    1.函数组件与类组件的区别? 函数组件:没有实例, 没有生命周期,没有state,只能接收props类组件:有实例...

  • angular组件

    Angular组件 @Component装饰器 @Component装饰器用于标示这个类是组件类 selector...

网友评论

      本文标题:ReactNative的函数组件与类组件、Component 与

      本文链接:https://www.haomeiwen.com/subject/qmjbyhtx.html