【问题标题】:React Typescript: get sessionStorage after reload of pageReact Typescript:重新加载页面后获取 sessionStorage
【发布时间】:2022-01-14 20:19:47
【问题描述】:

用户登录后,身份验证令牌会保存在sessionStorage 中,并且页面会重新加载。现在重新加载后我想读取该数据并将其存储在state 但渲染不会从<Login /> 更改为<Layout>...

export default class Home extends React.Component<any, State> {
    constructor(props: any) {
        super(props);
        this.state = {
            auth: true,
        }

        this._auth();
    }

   public render() {
        return (
            <>
                {this.state.auth ?
                    <Login /> :
                    <Layout>
                    ...
                    </Layout>
           </>
        )
   };

   private _auth(): void {
        if (sessionStorage.getItem("accessGranted") !== "")
            this.setState({ auth: true });
        else
            this.setState({ auth: false });
   }

【问题讨论】:

    标签: javascript reactjs typescript antd


    【解决方案1】:

    不要在constructor() 中调用setState()。相反,如果一个组件 需要使用本地状态,将初始状态分配给this.state 直接在构造函数中。

    componentDidMount() 在组件安装后立即调用。 您可以立即拨打setState()componentDidMount() 和 触发额外的渲染,但这发生在浏览器之前 更新屏幕,调用render() 两次。

    read more here

    您可以从_auth 方法返回sessionStorage 的值并使用该值在构造函数中创建状态,或者您可以简单地在componentDidMount() 中调用this._auth,这仍然可以,但主要用于用于异步计算、副作用等。

    【讨论】:

    • 函数 _auth 现在返回一个布尔值并在渲染中调用它,但它的异步和 &lt;Login /&gt; 组件仍在加载。
    • localStoragesessionStorage 调用是同步的。如果您更新了 _auth 方法,请同时更新问题。
    猜你喜欢
    • 2021-12-09
    • 2019-01-05
    • 1970-01-01
    • 2022-12-19
    • 2018-05-02
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多