美文网首页
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 无状态组件

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