美文网首页
无状态组件

无状态组件

作者: 星期六1111 | 来源:发表于2017-09-28 23:50 被阅读52次

问题描述

晚上听小伙伴说,React的无状态组件,一时懵逼,之前没有听说过,知道的到关于react创建组件的方式仅有两种:

  • ES5写法:React.createClass
  • ES6写法:React.Component
  • 今天来尝试的第三种: 无状态组件

矛盾点

为什么会出现无状态组件?既然无状态的组件没有生命周期,那么setState的功能如何实现?

问题解决

Q1:无状态的组件是什么?
A1:下面是官网上的一个例子

const Todo = (props) => (
 <li onClick={props.onClick}
 style={{textDecoration: props.complete ? "line-through" : "none"}} >
 {props.text} 
 </li> 
)

首先,它更新了我的认知,组件不再是class 了,它可以是一个function,主要负责用来展示,没有状态(state)的影响所以就是纯静态展示的作用。。。。看起来,确实是比定义一个es6要简洁

Q2:我们显示在页面上的数据一般都是通过父组件传递,this.props获取,无状态组件没有this,那么它是如何获取props的?
A2:因为它的本身是一个函数,所以可以通过参数来获取。看下面的伪代码:

//父组件
 <div>
  <AppComponent  data = {[]}   loadding = { true }  loadData = { 函数 }  />
 </div>
//子组件
const AppComponent = (props) =>{
     const { data, loadding, loadData } = props; // 通过es6的对象解构赋值的写法,直接从props获取到
     ……
     return <div>
      这是一个干净纯洁的stateless组件
     </div>
  }

Q3:官网上说无状态组件没有生命周期,好奇没有状态那么setState的方法改怎么办?
A3:看完demo ,哦,明白了。就是于我们常用的回调函数,自下而上的传值

# 父组件
  import ChildComponent from './ChildComponent'; // 引入子组件
  class AppComponent extends React.Component {
   state = {  msg:null,  content: null   // 初始状态 }

   changeLoad(content){  // 这个方法是传递给子组件调用的,并且子组件会传递content过来
     this.setState({
      msg: '反向传递成功',
      content           // { content } 等同于 { content: content }
     })
   }
   render(){
     return 
      <div>  <ChildComponent   msg = { msg }   changeLoad = { this.changeLoad }   // 调用子组件并传递msg以changeLoad方法
       />
      </div>
   }
 }

# 子组件
const ChildComponent =({ msg, changeLoad })=>{
  const str = "I love you";
  return <div>
   { msg?msg:null }  
   <button onClick = { changeLoad(str) }> 点我传递str给父组件 </button>  // 调用父组件的changeLoad方法并传递str给父组件
  </div>
}

也就是说:无状态组件想要实现的setstate的两个初识条件:

  • 父组件不是stateless组件,它有生命周期。
  • 必须依赖于父组件

反思

感觉自己像井底之娃,只知道自己用的那一小点,学习知识还是要全面的,避免盲人摸象。

action

多看看react的官网,React的版本升级后,有些地方使用可能已经变了,完成一些新特性的练习demo.

相关文章

  • React入门(八)无状态组件

    本节知识点 (1) 无状态组件和有状态组件的区别 (2) 无状态组件的使用 (一)无状态组件和有状态组件的区别 (...

  • 函数式组件和类组件

    类组件(有状态组件) 函数式组件(无状态组件)没有生命周期 受控组件:所有的状态都没有,受外部组件控制才能改变状态...

  • react组件设计心得

    无状态组件有状态组件

  • 组件

    组件定义 组件的props 组件的state 有状态组件和无状态组件 属性校验和默认属性 组件样式

  • Flutter StatefullWidget 三种状态管理De

    在Flutter中,组件的状态管理还是非常重要的,组件要么是无状态的组件,要么是有状态的组件。无状态的组件使用起来...

  • 学习笔记(十八)Vuex状态管理

    Vuex状态管理 组件状态管理及组件间通信回顾 状态管理 状态集中管理和分发,解决多个组件共享状态的问题 状态自管...

  • 说说 Vue.js 中的 functional 函数化组件

    Vue.js 组件提供了一个 functional 开关,设置为 true 后,就可以让组件变为无状态、无实例的...

  • React 进阶二 组件详解

    React组件 React的组件大概分为俩部分,无状态组件和有状态组件 无状态组件。下面React官网中定义的一个...

  • react设计模式

    一. 有状态组件(stateful)与无状态组件(stateless) 有状态组件使用class声明,内部有sta...

  • 获取form,ref---antd

    无状态组件,获取form 无状态组件,获取ref 函数组件获取ref

网友评论

      本文标题:无状态组件

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