组件规范和生命周期——react文档翻译

组件规范

当通过调用React.creatClass()来生成一个组件类的时候,你需要提供一个规范对象作为参数传入,这个对象必须包含render方法以及包含其他可选的生命周期方法。这些方法介绍如下。

render

render()方法是必须的。
当调用这个方法的时候,它会检查this.propsthis.state并且返回一个子元素( child element )。这个子元素可以是一个虚拟的原生DOM标签也可以是我们之前定义好的一个组件。当然也可以返回null或者false值表示不想做任何渲染。
在render方法的背后,React渲染了一个<noscript>标签以及运行diff算法。当返回null或者false值时,ReactDOM.findDOMNode(this)将返回null
reder()方法需要纯净,即它不能修改组件的state,它每次调用所返回的值都需相同,并且它不能读写DOM或者和浏览器有互动操作(例如使用setTimeout())。如果你需要和浏览器之间进行互动,那么将这些内容写入到componentDidMount()或者其他生命周期方法中。

getInitialState

这个方法在组件被挂载前调用一次,它的返回值会被用来初始化this.state

getDefaultProps

这个方法在组件类创建的时候调用一次并将值缓存(意味着相同的组件重新挂载的时候这个方法不会被调用)。 如果组件的prop不是从父组件传进来,那么这些值将会用来初始化this.props
这个方法是在任何实例被创建前调用。另外,这个方法返回的任何复杂类型值都会在实例之间共享而不是拷贝。

propTypes

propTypes对象允许你验证传递给组件的props的值是否符合要求,想要了解更多关于propTypes的内容请看可复用的组件

mixins

mixins数组允许你使用mixins来在多个组件之间共享一些行为。想要了解更多信息,请参阅可复用的组件

statics

statics对象允许你定义一些静态方法,这些方法可以在组件类中被调用。例如

var MyComponent = React.createClass({
  statics: {
    customMethod: function(foo) {
      return foo === 'bar';
    }
  },render: function() {
  }
});

MyComponent.customMethod('bar');  // true

静态方法意味着你可以在任何组件实例被创建之前调用这些方法,当然这些方法也因此无法获取你组件的propsstate。如果你想要在静态方法中使用props或者state,那么在调用这些方法的时候将propsstate作为参数传递进去。

displayName

displayName字符串会在debug中用到,详情参见https://facebook.github.io/re...

生命周期方法

不同的方法会在组件生命周期中不同的时间点执行。

Mouting:componentWillMount

在服务器端和在客户端调用一次,在初始化render执行之前。如果在这个方法里面调用setState,render()方法只会执行一次尽管state发生了改变。

Mouting:componentDidMount

仅仅在客户端调用一次,在初始化render发生之后立即被调用,在这个方法中你可以获取到组件中的任何子节点。因为子组件的componentDidMount()方法调用是在父组件之前。
如果你想整合其他js框架,例如使用setTimeout或者setInterval来设置时间或者发送AJAX请求,那么都可以在这个方法里面书写。

Updating: componentWillReceiveProps

这个方法是在组件接收到新的props的时候调用,在组件初始化渲染的时候不会调用此方法。
通过this.setState()来更新状态可以导致对render()方法的一次调用,而 componentWillReceiveProps 可以让你在render()调用之前来改变prop值。此时,旧的props可以通过this.props访问到,这个函数里面调用this.setSteate()不会触发额外的一次渲染。

备注1:常常出现的一个错误用法是认为在这个生命周期方法中props已经改变。
备注2:没有componentWillReceiveState这个相似的生命周期方法。prop的改变会导致状态的改变,但反过来讲就是不对的。如果你需要在state值改变时进行一些操作,请使用componentWillUpdate这个方法。

Updating: shouldComponentUpdate

当组件接收到新的props或者state,在重新渲染之前会调用这个方法,然后根据返回值(true或者false来决定是否进行重新渲染)。这个方法在首次渲染的时候是不调用的或者在forceUpdate的时候是不会被调用的。
这个方法默认返回true,但是如果你确认新的propsstate不需要引起组件更新的情况下可以让它返回false值。
如果shouldComponentUpdate返回false,那么便会完全跳过之后的render直到下一次state的改变。除此之外componentWillUpdatecomponentDidUpdate方法也不会被调用。
默认情况下, shouldComponentUpdate总是返回true来避免当statemutated的时候导致的微妙的bug,但是如果你小心地总是将state作为不可变数据,那么你可以重写 shouldComponentUpdate方法来根据新旧propsstate的对比来确定返回true或者是false
如果在组件数目庞大的情况下遇到性能瓶颈,那么在这个方法里做一些优化来加速你的app。

Updating: componentWillUpdate

当组件接收到新的props或者state,在重新渲染之前会调用这个方法。 这个方法在首次渲染的时候是不调用的或者在forceUpdate的时候是不会被调用的。

注意:这个方法里不能调用this.setState()

Updating: componentDidUpdate

这个方法在组件更新并且重新刷新DOM之后被调用。 在首次渲染的时候是不调用的或者在forceUpdate的时候是不会被调用的。
这个方法提供了组件更新后操作DOM节点的机会。

Unmounting: componentWillUnmount

在组件从DOM中卸载之后被立即调用。
你可以在这个方法做一些必要的清除工作,比如一些计时器或者清除一些在componentDidMount方法中添加的一些DOM元素。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom