React各生命周期详细描述-来自官方文档

Commonly Used Lifecycle Methods (常见的生命周期方法)
render()
在使用ES6类(class)方式构建组件时,render方法是唯一一个需要声明的方法。也可以使用函数方式构建组件,请参考
当render()被调用时,它会检查this.propsthis.state是否发生变化,并且return下面任意一种类型:

  • React elements(react元素):通常是指通过JSX语法创建的元素。例如,DOM节点
    自定义的 <SubComponet />组件标签,都可以返回,供react进行渲染。
class SubComponent extends React.Component{
	render() {
		return (
			<div>
				 <h2>子组件</h2> 
			</div>
		)
	}
}
class FatherComponent extends React.Component{
	render() {
		return <SubComponent />
	}
}
export default FatherComponent;
  • Arrays and fragments(数组和片段):通过数组或片段的包装返回多个元素。
    在使用数组时,为了避免Warning: Each child in an array or iterator should have a unique "key" prop.警告,需要为每个元素添加key属性。
class ReturnArray extends PureComponent {
  render (){
    return [
      <p key="1">React 16 can return multiple elements ❤️</p>,
      <p key="2">React 16 can return multiple elements ❤️</p>,
      <p key="3">React 16 can return multiple elements ❤️</p>,
    ];
  };
}

React v16.2介绍了另一种返回多个元素的标签,即React.Fragment。它只是通过JSX语法抽象出的空的标签,不支持标签属性。不需要额外的组件,不需要数据的形式,也不需要添加key值,总之就是把多元素作为其子节点。

class ReturnArray extends PureComponent {
  render (){
    return ( 
      <React.Fragment>
        <p>React 16 can return multiple elements ❤️</p>
        <p>React 16 can return multiple elements ❤️</p>
        <p>React 16 can return multiple elements ❤️</p>
      </React.Fragment>
    );
  };
}
  • Portals:请参考,待填坑。
  • String and numbers:返回字符串或者数字,作为一个文本节点添加到DOM中去。
  • Booleans or null:如果没有其他元素可返回的话,可以这样写:
return null; or
return false; or
return true; or
return undefined; 

例子:输出数组中的奇数值,可以采用如下方法:

class App extends React.Component {
  constructor(props){
    super(props);
    this.number = this.props.number;
  }
  render() {
    if(this.number%2) {
      return (
        <div>
          Number: {this.number}
        </div>
      )
    }
    return (null);    
  }
}

const data = [1, 2, 3, 4, 5]

ReactDOM.render(<div>{data.map(el => <App key={el} number={el} />)}</div>, document.getElementById('root'));

render()方法应该是一个纯函数,也就是输入和输出是固定的。此方法内不应该修改组件的状态,每次调用都应返回相同的结果,初次之外,也不应该直接的与浏览器进行交互。
如果你需要与浏览器进行交互,你可以在componentDidMount或者其他生命函数里进行。保持render()是一个纯函数,将会很容易的构建组件。

注意:当shouldComponentUpdate()生命周期方法返回false时,render()方法将不再被调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值