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

在React项目中使用Redux

在React项目中使用Redux

收到一只叮咚 2021-03-30 14:13:58
我正在尝试在我的React项目中使用Redux。目的是要有一个给我令牌的组件。我不想将此令牌存储在我的App.js中,所以我使用redux。但是,当我尝试将更改保存到商店时,它可以工作,但不会重新渲染。这是我的代码:App.jsimport React, { Component } from 'react';import LoginApi from './components/LoginApi.js';import { createStore } from 'redux'import './App.css';function pops(state = { sessionToken: '', isLoggedIn: false, group: '' }, action) {    const { sessionToken, isLoggedIn, group, type } = action;    switch (type) {        case 'LOGIN':            return { sessionToken, isLoggedIn, group };        case 'LOGOUT':            return { sessionToken: '', isLoggedIn: false, group: '' };        default:            return { sessionToken, isLoggedIn, group };    }}const store = createStore(pops, { sessionToken: '', isLoggedIn: false, group: '', });class App extends Component {    render() {        return (            <div className="App container-fluid">                <div className="row text-center">                    <div className="col-3"><LoginApi store={store} /></div>                </div>            </div>        );    }}export default App;LoginApi.jsimport React from 'react';import './LoginApi.css';class LoginApi extends React.Component {    handleLogout() {        this.props.store.dispatch({ type: "LOGOUT"});    }    handleLogin() {        this.props.store.dispatch({ type: "LOGIN", sessionToken, isLoggedIn: true, group });    }    render() {        const { isLoggedIn, sessionToken } = this.props.store.getState();        console.log(this.props.store.getState());        return (            <div className="Login">                {(isLoggedIn === true && sessionToken !== "") ?                    <button type="button" className="btn btn-danger" onClick={this.handleLogout}>Logout</button>                    :                    <button type="button" className="btn btn-primary" onClick={this.handleLogin}>Login</button>                }            </div>        );    }}export default LoginApi;handleLogout和handleLogin是使用axios对我的API的调用。我跳过了此事以使其更加清晰。
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

你可能是说default: return state;。否则,除了'LOGIN'和'LOGOUT'以外的任何操作都会将您的登录状态设置为意外的状态(通常是undefined)。

要触发重新渲染,您需要更新道具或组件的内部状态。您需要到subcribe商店并手动进行操作或使用connect。


查看完整回答
反对 回复 2021-04-08
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

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