zoukankan      html  css  js  c++  java
  • react-hook

    react16.8新增特性,它可以让你在不编写class的情况下使用state及其它react特性

    hook可取代class的使用

    hook产生的原因:
    1.解决组件间复用状态逻辑难的问题

    2.复杂组件变得难以理解

    hook使用规则:

    1.只能在函数最外层调用hook,不要在循环、条件判断或子函数中调用

    2.只能在react得函数组件中调用hook。不要在其它JavaScript函数中调用。

    3.自定义hook中也可以调用hook

    规范hook使用规则的插件:

    eslint-plugin-react-hooks

    "react-hooks/rules-of-hooks": "error", // 检查 Hook 的规则

    "react-hooks/exhaustive-deps": "warn" // 检查 effect 的依赖

    useState用法:

    声明变量:

    const [age,setAge]=useState(42)

    const [fruit,setFruit]=useState('banana')

    const [todos,setTodos] = useState([{text:'学习hook'}])

    单独更新值:

    setFruit('orange')

    hook与class的对于写法:

    //HOOK写法
    
    import React, { useState } from 'react';
    
    function Example() {
      // 声明一个叫 "count" 的 state 变量
      const [count, setCount] = useState(0);
    
      return (
        <div>
          <p>You clicked {count} times</p>
          <button onClick={() => setCount(count + 1)}>
            Click me
          </button>
        </div>
      );
    }
    
    //Class写法
    class Example extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          count: 0
        };
      }
    
      render() {
        return (
          <div>
            <p>You clicked {this.state.count} times</p>
            <button onClick={() => this.setState({ count: this.state.count + 1 })}>
              Click me
            </button>
          </div>
        );
      }
    }

    useEffect Hook用法:

    useEffect hook可以看作componentDidMount、componentDidUpdate和componentWillUnmount这三个函数的组合。在第一次渲染之后和每次更新之后都会执行

    import React, { useState, useEffect } from 'react';
    
    function FriendStatus(props) {
      const [isOnline, setIsOnline] = useState(null);
    
      useEffect(() => {
        function handleStatusChange(status) {
          setIsOnline(status.isOnline);
        }
        ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
        // Specify how to clean up after this effect:
        return function cleanup() {
          ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
        };
      });
    
      if (isOnline === null) {
        return 'Loading...';
      }
      return isOnline ? 'Online' : 'Offline';
    }

    自定义hook:

    1.必须以use开头

     
     
  • 相关阅读:
    CentOS7-samba文件共享服务
    centos7-vsftpd文件服务器
    linux用户和权限管理
    linux程序安装及包管理
    linux文件查找-find命令
    linux文本编辑器-VIM基本使用方法
    linux文本处理工具及正则表达式
    linux目录结构及文件管理
    linux基本命令及使用方法
    巴什博奕----取完者负的分析
  • 原文地址:https://www.cnblogs.com/cxdxm/p/14098469.html
Copyright © 2011-2022 走看看