react 学习笔记(二)

这次主要针对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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Learn from React 官方文档 一、Rendering Elements 1. Rendering a...
    恰皮阅读 2,732评论 2 3
  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,697评论 1 33
  • 以下内容是我在学习和研究React时,对React的特性、重点和注意事项的提取、精练和总结,可以做为React特性...
    科研者阅读 8,445评论 2 21
  • React简介 (1)简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaSc...
    鱼鱼吃猫猫阅读 1,767评论 1 6
  • 前几天骑车出门。天气极好。想不到更好的表达。其实不表达更好。不表达就沉浸在当下的意境中了表达反而破坏了那意境了。也...
    学禅人阅读 2,055评论 0 1

友情链接更多精彩内容