加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

React 组件生命周期(注意state不能在cwu方法中修改)

发布时间:2020-12-15 03:24:22 所属栏目:百科 来源:网络整理
导读:Component Specs and Lifecycle Component Specifications When creating a component class by invoking React.createClass() ,you should provide a specification object that contains a render method and can optionally contain other lifecycle meth

Component Specs and Lifecycle

Component Specifications

When creating a component class by invokingReact.createClass(),you should provide a specification object that contains arendermethod and can optionally contain other lifecycle methods described here.

Note:

It is also possible to use plain JavaScript classes as component classes. These classes can implement most of the same methods,though there are some differences. For more information about these differences,please read our documentation aboutES6 classes.

render

ReactElement render()

Therender()method is required.

When called,it should examinethis.propsandthis.stateand return a single child element. This child element can be either a virtual representation of a native DOM component (such as<div />orReact.DOM.div()) or another composite component that you've defined yourself.

You can also returnnullorfalseto indicate that you don't want anything rendered. Behind the scenes,React renders a<noscript>tag to work with our current diffing algorithm. When returningfalse,ReactDOM.findDOMNode(this)will returnnull.

render()function should bepure,meaning that it does not modify component state,it returns the same result each time it's invoked,and it does not read from or write to the DOM or otherwise interact with the browser (e.g.,by usingsetTimeout). If you need to interact with the browser,perform your work incomponentDidMount()or the other lifecycle methods instead. Keepingrender()pure makes server rendering more practical and makes components easier to think about.

getInitialState

object getInitialState()

Invoked once before the component is mounted. The return value will be used as the initial value ofthis.state.

getDefaultProps

object getDefaultProps()

Invoked once and cached when the class is created. Values in the mapping will be set onthis.propsif that prop is not specified by the parent component (i.e. using anincheck).

This method is invoked before any instances are created and thus cannot rely onthis.props. In addition,be aware that any complex objects returned bygetDefaultProps()will be shared across instances,not copied.

propTypes

object propTypes

propTypesobject allows you to validate props being passed to your components. For more information aboutpropTypes,seeReusable Components.

mixins

array mixins

mixinsarray allows you to use mixins to share behavior among multiple components. For more information about mixins,249)"> statics

object statics

staticsobject allows you to define static methods that can be called on the component class. For example:

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

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

Methods defined within this block arestatic,meaning that you can run them before any component instances are created,and the methods do not have access to the props or state of your components. If you want to check the value of props in a static method,have the caller pass in the props as an argument to the static method.

displayName

string displayName

displayNamestring is used in debugging messages. JSX sets this value automatically; seeJSX in Depth.

Lifecycle Methods

Various methods are executed at specific points in a component's lifecycle.

Mounting: componentWillMount

void componentWillMount()

Invoked once,both on the client and server,immediately before the initial rendering occurs. If you callsetStatewithin this method,85)">render()will see the updated state and will be executed only once despite the state change.

Mounting: componentDidMount

void componentDidMount()

componentDidMount()method of child components is invoked before that of parent components.

If you want to integrate with other JavaScript frameworks,set timers usingsetTimeoutorsetInterval,or send AJAX requests,perform those operations in this method.

Updating: componentWillReceiveProps

void componentWillReceiveProps( object nextProps )

Invoked when a component is receiving new props. This method is not called for the initial render.

Use this as an opportunity to react to a prop transition beforerender()is called by updating the state usingthis.setState(). The old props can be accessed viathis.props. Callingthis.setState()within this function will not trigger an additional render.

componentWillReceivePropsfunction(nextProps) {
  this.setState({
    likesIncreasing: nextProps.likeCount > this.props.likeCount
  });
}

Note:

One common mistake is for code executed during this lifecycle method to assume that props have changed. To understand why this is invalid,readA implies B does not imply B implies A

There is no analogous methodcomponentWillReceiveState. An incoming prop transition may cause a state change,but the opposite is not true. If you need to perform operations in response to a state change,usecomponentWillUpdate.

Updating: shouldComponentUpdate

boolean shouldComponentUpdate(
  object nextProps, object nextState
)

Invoked before rendering when new props or state are being received. This method is not called for the initial render or whenforceUpdateis used.

Use this as an opportunity toreturn falsewhen you're certain that the transition to the new props and state will not require a component update.

shouldComponentUpdatefunction(nextProps, nextState) {
  return nextProps.id !== this.props.id;
}

IfshouldComponentUpdatereturns false,thenrender()will be completely skipped until the next state change. In addition,85)">componentWillUpdateandcomponentDidUpdatewill not be called.

By default,85)">shouldComponentUpdatealways returnstrueto prevent subtle bugs whenstateis mutated in place,but if you are careful to always treatstateas immutable and to read only frompropsandstateinrender()then you can overrideshouldComponentUpdatewith an implementation that compares the old props and state to their replacements.

If performance is a bottleneck,especially with dozens or hundreds of components,85)">shouldComponentUpdateto speed up your app.

Updating: componentWillUpdate

void componentWillUpdate( object nextProps,249)"> Invoked immediately before rendering when new props or state are being received. This method is not called for the initial render.

Use this as an opportunity to perform preparation before an update occurs.

Note:

Youcannotusethis.setState()in this method. If you need to update state in response to a prop change,85)">componentWillReceivePropsinstead.

这里注意一下,setState方法不能在这个方法中调用,这是因为state改变后,这个方法就会再次调用,使程序陷入死循环。

Updating: componentDidUpdate

void componentDidUpdate( object prevProps, object prevState )

Invoked immediately after the component's updates are flushed to the DOM. This method is not called for the initial render.

Use this as an opportunity to operate on the DOM when the component has been updated.

Unmounting: componentWillUnmount#

void componentWillUnmount()

Invoked immediately before a component is unmounted from the DOM.

Perform any necessary cleanup in this method,such as invalidating timers or cleaning up any DOM elements that were created incomponentDidMount.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读