【问题标题】:convert class based component to functional component将基于类的组件转换为功能组件
【发布时间】:2021-11-27 06:04:18
【问题描述】:

我想将这个类转换为基于函数的组件以便学习它们

  componentWillMount() 
  {
    if(localStorage.getItem('IsLogin') === '1')
    {
        this.setState({isLogin:true});
    }
  }
  setAuth = (userObject) =>
  {
      this.setState({isLogin:true});
      localStorage.setItem('IsLogin',1);
      localStorage.setItem('user',JSON.stringify(userObject));
      
  }

  setDestroyAuth = () =>
  {
      this.setState({isLogin:false});
      localStorage.removeItem("IsLogin");
      localStorage.removeItem("user");
  }

【问题讨论】:

标签: reactjs


【解决方案1】:

您可以尝试这种方式并将基于类的组件转换为功能性基础组件。您可以在functional component 中使用React Hooks 进行状态管理。 hooks-intro

例子:

import React, { useEffect, useState } from "react";

const App = (props) => {
  const [state, setState] = useState({ isLogin: false });

  useEffect(() => {
    if (localStorage.getItem("IsLogin") === "1") {
      setState({ ...state, isLogin: true });
    }
  }, []);

  const setAuth = (userObject) => {
    setState({ ...state, isLogin: true });
    localStorage.setItem("IsLogin", 1);
    localStorage.setItem("user", JSON.stringify(userObject));
  };

  const setDestroyAuth = () => {
    this.setState({ ...state, isLogin: false });
    localStorage.removeItem("IsLogin");
    localStorage.removeItem("user");
  };

  return (
    <div className="row">
      Auth status : {state.isLogin}
      <div>
        <button onClick={setAuth}>Set Auth</button>
        <button onClick={setDestroyAuth}>Destroy Auth</button>
      </div>
    </div>
  );
};

export default App;

【讨论】:

  • 如果我想将状态作为道具传递,而不是我如何在功能组件中做到这一点
  • 你可以像&lt;App count={10} /&gt;一样访问app组件。 const App = (props) =&gt; { console.log(props) }
【解决方案2】:

试试这个方法:)

const [isLogin, setIsLogin] = React.useState(false) // declare it as bool instead object

React.useEffect(() => {
  if(localStorage.getItem('IsLogin') === '1')
   {
     setIsLogin(true)
   }
}, [])

setAuth = (user) => {
  setIsLogin(true)
  localStorage.setItem('IsLogin',1);
  localStorage.setItem('user',JSON.stringify(user))
}

setDestroyAuth = () => {
  setIsLogin(false)
  localStorage.removeItem("IsLogin");
  localStorage.removeItem("user");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2021-11-12
    • 2020-02-08
    • 1970-01-01
    • 2020-09-27
    • 2020-08-26
    相关资源
    最近更新 更多