一、state使用:

  1、什么时候不能 设置state(或没有必要设置):

    a、constructor、

  2、默认的 state 值,一定要在初始化设置。因为,render 比 setState 早。

  3、所有的组件中都加上 shouldComponentUpdate 生命周期,只对组件自己的props改变,才更新组件。屏蔽调 意外 的代码执行。

二、props 的使用:

  1、上面地方可以正常获取 props的值

三、回调渲染模式:https://blog.csdn.net/weixin_30732487/article/details/99894871 或 https://segmentfault.com/a/1190000016885832?utm_source=tag-newest

  1、这种模式中,组件会接收某个函数作为其子组件,然后在渲染函数中以 props.children 进行调用:

  1. <Twitter username='tylermcginnis33'>
  2. {(user) => user === null
  3. ? <Loading />
  4. : <Badge info={user} />}
  5. </Twitter>
  1. import React, { Component, PropTypes } from 'react'
  2. import fetchUser from 'twitter'
  3. class Twitter extends Component {
  4. state = {
  5. user: null,
  6. }
  7. static propTypes = {
  8. username: PropTypes.string.isRequired,
  9. }
  10. componentDidMount () {
  11. fetchUser(this.props.username)
  12. .then((user) => this.setState({user}))
  13. }
  14. render () {
  15. return this.props.children(this.state.user)
  16. }
  17. }

四、组件传值:

  1、

  2、Context:    https://www.cnblogs.com/littleSpill/p/11221538.html

  概念:Context提供了一种方式,能够让数据在组件树中传递,而不必一级一级手动传递。

  个人理解: 感觉有点想,父组件 把值给第三方保管(Context对象),孙组件,从第三方那拿值。但是这种处理,感觉不好。

       一般组件,都是分不同的组件的文件的。父组件 和 孙组件要使用同一个context对象,所以,这个context 要单独放在一个文件中,供这个两个组件使用。

  1. import React, { Component, createContext } from 'react';
  2.  
  3. const BatteryContext = createContext();
  4.  
  5. class Leaf extends Component { // 声明一个孙组件
  6. render() {
  7. return (
  8. <BatteryContext.Consumer> // Consumer内 回调函数,值作为参数传递进来
  9. {
  10. battery => <h1>Battery : {battery}</h1>
  11. }
  12. </BatteryContext.Consumer>
  13. )
  14. }
  15. }
  16.  
  17. class Middle extends Component { // 声明一个子组件
  18. render() {
  19. return <Leaf />
  20. }
  21. }
  22.  
  23. class App extends Component { // 声明一个父组件
  24. render(){
  25. return (
  26. <BatteryContext.Provider value={690}>
  27. <Middle />
  28. </BatteryContext.Provider>
  29. );
  30. }
  31. }
  32.  
  33. export default App;

最后再提示一下大家,不要滥用context,不然会影响组件的独立性。 如果一个组件中只使用一个Context的话,就可以使用contextType代替Consumer。详见 https://www.cnblogs.com/littleSpill/p/11221817.html

五、 注意事项(也可以说是避免问题):react 中 生命周期 设计的 机制,很容易引起一些问题。            组件生命周期 参考:https://www.cnblogs.com/wfblog/p/11842622.html

  1、有的生命周期中不能 设置 state(或有条件的设置) 不然会 陷入死循环。比如 render,componentWillUpdate、componentDidUpdate(设置好条件才可以更新) 等。    后续在补充。。。

  2、父组件一旦 设置 state ,就会递归 执行 所有 子组件的 render,有的子组件是不需要更新的          后续在补充。。。

    3、ajax请求,最好还是放在使用的组件内进行请求。如果在父组件中请求,因为请求是异步,所以挂载阶段,父组件传递给子组件的props 是undefined。子组件使用 undefined 的属性,是会报错的。

    如果要在父组件上 请求,需要给 props 的值,设置值。初始值可以是空对象,主要子组件使用时,不出现使用  undefined的属性,就可以。  如   undefined.name,就会报错的。

 

六、

 

react教程 — 组件的更多相关文章

  1. React教程-组件

    在React中创建一个组件非常简单(React组件有2种,一个非状态组件,一个有状态组件) 首先我们来看看ES6里面如何写构造函数 class App{ constructor(){ } event( ...

  2. react教程 — 组件的生命周期 和 执行顺序

    一.组件执行的生命周期:                  参考  https://www.cnblogs.com/soyxiaobi/p/9559117.html  或  https://www.c ...

  3. React的组件间通信

    一.React的单向数据流 React是单向数据流,数据主要从父节点传递到子节点(通过props).如果顶层(父级)的某个props改变了,React会重渲染所有的子节点.这通常被称为“自顶向下”或“ ...

  4. 学习react教程

    网址收藏: React官网,React的Github,React的中文文档 1.react是什么? React起源于Facebook的内部项目,因为该公司对市场上所有的Javascript MVC框架 ...

  5. 【react表格组件】material-table 基本用法 & 组件override

    教程: https://mbrn.github.io/material-table/#/ https://material-ui.com/api/table/ github: https://gith ...

  6. React入门介绍(2)- React Component-React组件

    React Component-React组件 允许用户自由封装组件是React非常突出的特性,用户可将自己创建的组件像普通的HTML标签一样插入页面,React.CreateClass方法就是用来创 ...

  7. 看完阮一峰的React教程后, 我写了一个TodoList

    看完阮一峰的React教程后,就自己做了这个TodoList,自己慢慢琢磨效率差了点但是作为入门小练习还是不错的. 以下是效果图:我的源码:todolistUI:bootstrap 4 一.组件化 我 ...

  8. react教程 — 性能优化

    参考:https://segmentfault.com/a/1190000007811296?utm_medium=referral&utm_source=tuicool  或  https: ...

  9. (私人收藏)React教程手册

    React教程手册 https://pan.baidu.com/s/1ka2PJ54HgqJ8lC6XgbvdLg pedx React 教程 含有3个附件,如下: react.js react-do ...

随机推荐

  1. ucenter 验证码看不到的解决办法

    ucenter 验证码看不到的解决办法,很简单,很实用,本人亲试成功~http://www.jinyuanbao.cn 把images /fonts /en 的ttf 刪除可以了!

  2. Convolutional Neural Networks(1): Architecture

    Concolutional Neural Networks(CNN)同样使用三层结构,但结构上同Feedforward Neural Network有很大不同,其结构如下图: Input layer: ...

  3. linux点滴记录

    以下均为在Ubuntu下实践操作 更改DNS //编辑文件 - “/etc/resolv.conf”,打开“终端应用程序”-“附件” - “终端”,在终端里输入下面的命令: sudo nano /et ...

  4. Java thread(2)

    这一块主要是从Thread类源码的角度来分析两种线程的实现方式,这里分析的也仅仅是最基本的部分. 就从线程的启动函数 start方法开始分析 只是分析最主要的部分 在start()方法中,除了grou ...

  5. VS2012生成Web时报未能找到元数据文件xxx.dll

    问题:引用里已经添加了,还是报‘未能找到元数据文件xxx.dll’ 解决:添加了相同的不同路径的xxx.dll文件,删掉一个用不到的,就不报错了

  6. 20190815 On Java8 第五章 控制流

    第五章 控制流 迭代语句 逗号操作符 在 Java 中逗号运算符(这里并非指我们平常用于分隔定义和方法参数的逗号分隔符)仅有一种用法:在 for 循环的初始化和步进控制中定义多个变量.我们可以使用逗号 ...

  7. 三级级联(js实现)

    <!DOCTYPE html> <html>    <head>        <meta charset="UTF-8">     ...

  8. anaconda安装教程、管理虚拟环境

    原文链接:https://blog.csdn.net/ITLearnHall/article/details/81708148 另可参看文章:https://www.cnblogs.com/jonin ...

  9. 解决mxGraph放大/缩小在非IE浏览器下overlay图标位置不变化的问题

    首先要创建一个工具栏.并为工具栏中的放大.缩小button定义事件. <div id="toolbar" style="float:left;margin-top: ...

  10. git stash 后"本地代码不见了"

    git stash 当本地代码不想提交覆盖,又忙于其他分支,可以先储存起来. git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内 ...