美文网首页
React 无状态组件

React 无状态组件

作者: 张思学 | 来源:发表于2019-11-14 14:21 被阅读0次

无状态组件主要用来定义模板,接收来自父组件props传递过来的数据,使用 {props.xxx} 的表达式把 props 塞到模板里面;当一个组件只有 render 函数的时候我们完全可以通过无状态组件替换掉普通组件。
优点:无状态组件性能比较高,因为它就是一个函数;普通组件它是js里面的类,这个类生成的对象里面还会生成生命周期函数;
一个组件只有render,请使用无状态组件

todoList示例,直接复制的例子包含了redux代码,如不动请先看Redux 安装、使用文章

import React, {useState} from 'react';
import Store from '../../store';  //导入store
import {getInputChange, getAddItem, getDeleteTodoItem} from '../../store/actionCreators'; //导入 actionCreators 方法
import {Button, Input, Message} from '@alifd/next';
import List from './components/list';
import styles from './index.module.scss';

export default function TodoList() {
  const [storeState, setStoreState] = useState(Store.getState()); //获取 Redux 数据 .getState()
  Store.subscribe(storeChange); //订阅 Redux 的改变,只要 Redux 发生改变 storeChange方法就会自动执行一次

  //重新获取 Redux 数据
  function storeChange() {
    setStoreState(Store.getState());
  }

  //删除方法,参数为下标
  function deleteListItem(index) {
    const action = getDeleteTodoItem(index)
    Store.dispatch(action); //调用 dispatch 并传递参数给 Redux
  }

  return (
    <div className={styles.todoList}>
      <div className={styles.todoSo}>
        <Input
          placeholder="请输入"
          value={storeState.inputValue}
          onChange={(e) => {
            const action = getInputChange(e)
            Store.dispatch(action);
          }}
          className={styles.todoInput}/>
        <Button
          type="primary"
          className={styles.todoButton}
          onClick={() => {
            if (storeState.inputValue){
              const action = getAddItem();
              Store.dispatch(action);
            }else{
              Message.error('输入不能为空');
            }
          }}>添加</Button>
      </div>
      <ul className={styles.todoUl}>
        {storeState.list.map((item, index) => (
          <List key={index} item={item} index={index} deleteItem={deleteListItem}/>
        ))}
      </ul>
    </div>
  );
};

子组件 无状态组件

import React from 'react';

const List = (props) =>{
  return (
    <li onClick={props.deleteItem.bind(this, props.index)}>{props.index} - {props.item}</li>
  );
}

export default List;

相关文章

  • React 进阶二 组件详解

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

  • React学习知识小总结

    react依赖: react react-dom babel-preset-react 组件自身状态设置初始状态:...

  • React入门(二)

    三、React组件 React 组件基本上是由组件的构建方式、组件内的状态属性与生命周期方法组成 React.cr...

  • React概念

    React 的核心思想是:封装组件。各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件。 React...

  • react的受控组件和非受控组件

    受控组件就是可以被 react 状态控制的组件在 react 中,Input textarea 等组件默认是非受控...

  • React学习笔记_02

    React 组件和状态 react 组件 1,组件的两种创建方式1,函数组件2,类组件 1,函数组件:使用 JS ...

  • 组件分享之前端组件——用于表单状态管理和验证的 React Ho

    组件分享之前端组件——用于表单状态管理和验证的 React Hooks (Web + React Native) ...

  • React Hook

    简介 :原本函数组件和类组件同为react组件,但是由于函数组件为无状态组件,react hook 的引入,让函数...

  • react基础

    认识React 组件 Jsx的引用 插值符号 组件的数据状态 组件的样式 组件的事件 组件的生命周期 React的...

  • React 性能优化之 setState

    React 组件状态 React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不...

网友评论

      本文标题:React 无状态组件

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