为了账号安全,请及时绑定邮箱和手机立即绑定

在每个组件上调用的用户 api

在每个组件上调用的用户 api

慕尼黑5688855 2023-04-01 16:35:10
您好,我正在使用 laravel 后端 REST API 和 React 作为前端。我的问题是每条路线上都有很多对用户 api 的调用。如果我去/category我收到了一个用户 API 请求,因为我需要有用户信息,比如如果是管理员;用户名;...,这是正常的,因为我在 App.js 上调用了这个 api 我试图在 上做一个条件语句来知道componentDidMount我是否已经拥有我状态下的用户数据,但是 React 返回给我infinite loop一个this.setState({user: data})所以我的问题是我可以调用一次 api 吗?或者我是否需要使用 Redux 来存储一次用户数据并使用这些数据?我的 App.js:import React from 'react';import axios from 'axios';import {BrowserRouter as Router, Switch, Route, Redirect} from 'react-router-dom';import Login from "./pages/Login";import Home from "./pages/Home";import Profile from "./pages/Profile";import Register from "./pages/Register";import Header from "./components/Header";import Administration from "./pages/Administration";import './assets/main.css'import './App.css'import PrivateRoute from "./components/PrivateRoute";import Category from "./pages/Category";import Product from "./pages/Product";import Order from "./pages/Order";import User from "./pages/User";import Support from "./pages/Support";export default class App extends React.Component {    constructor(props) {        super(props);        this.state = {            redirectToHome: false,            isLog: false,            isAdmin: false,            user: null,        }    }    componentDidMount(){        if (localStorage.getItem('token')){            axios.post('auth/me')                .then((res) => {                this.setUser(res.data)                 })                .catch((err) => {                    localStorage.removeItem('token')                })        }    }    setUser = (user) => {        this.setState({user: user})    }    render() {        if (this.state.redirectToHome){            return <Redirect to={'/'} from={'/logout'} />        }        return (            <Router>                <div>                    <Header user={this.state.user} setUser={this.setUser} />                </div>
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

要只调用一次用户获取代码,您需要一个地方来管理用户状态以检查它之前是否被调用过。你有两个不错的选择。您可以使用 Redux 并在全局状态中缓存用户值,或者您可以在传递状态中使用 Context API 和缓存。根据您拥有的路由数量,我会诚实地建议使用 redux,因为它(在我看来)对于较大的应用程序更好。上下文可能会变得混乱,因为它没有严格区分操作、缩减器和当前状态。



查看完整回答
反对 回复 2023-04-01
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信