美文网首页
react 学习笔记(二)

react 学习笔记(二)

作者: ybrelax | 来源:发表于2019-01-21 22:55 被阅读0次

这次主要针对react state和props这两个元素进行分析

state: 在react只需更新组件的state, 然后就可以根据state来重新渲染组件,也就是说state是组件的一个状态

组件中用到的一个变量是不是应该作为组件State,可以通过下面的4条依据进行判断:

1.这个变量是否是通过Props从父组件中获取?如果是,那么它不是一个状态。
2.这个变量是否在组件的整个生命周期中都保持不变?如果是,那么它不是一个状态。
3.这个变量是否可以通过其他状态(State)或者属性(Props)计算得到?如果是,那么它不是一个状态。
4.这个变量是否在组件的render方法中使用?如果不是,那么它不是一个状态。这种情况下,这个变量更
适合定义为组件的一个普通属性,例如组件中用到的定时器,就应该直接定义为this.timer,而不是this.state.timer

特点

  • 不能直接修改state.
    直接修改state, 组件并不会更新render.例如:
// error
 this.state.title = 'title'
// right
this.state.setState({title: 'title'})
  • state 的更新是异步的
    调用setState, 组件的state并不会改变, setState只是把修改的状态放入到一个对列中,react会优化正真的执行时间。计算后的state不能保证是最新的
    对于一个按钮多次点击的情况,如果直接设置state,可能只会加1, react内部会认将多次合并成一次
// 可以采取这种方法
this.state((preState, props) => ({
  counter: preState.num + 1;
})

小tips:
总得来说这个有点类似vue中得v-model

props: 用于父组件向子组件传值;但是props是不被允许修改的
一定要写PropTypes,切莫为了省事而不写
如果一个Props不是requied,一定在getDefaultProps中设置它
React.PropTypes主要用来验证组件接收到的props是否为正确的数据类型,如果不正确,console中就会出现对应的warning。出于性能方面的考虑,这个API只在开发环境下使用。

父组件用法

  <Parent children="yaobo"></Parent>

子组件

import PropTypes from 'prop-types';

class MyComponent extends React.Component {
  render() {
    // This must be exactly one element or it will warn.
    const children = this.props.children;
    return (
      <div>
        {children}
      </div>
    );
  }
}

MyComponent.propTypes = { // 这个要记得写
  children: PropTypes.element.isRequired
};

也可以设置默认的props

Greeting.defaultProps = {
 name: 'Stranger'
};

也可以在 getDefaultProps 中进行设置
官网推荐: https://reactjs.org/docs/typechecking-with-proptypes.html

参考文章:
https://www.jianshu.com/p/c6257cbef1b1

相关文章

网友评论

      本文标题:react 学习笔记(二)

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