Как сохранить состояние, если я вручную введу URL для других маршрутов? - PullRequest
0 голосов
/ 09 апреля 2019

Это мой первый раз, когда я создаю полный стек с использованием стека MERN.Я создал панель навигации, которая показывает текущего вошедшего в систему пользователя, когда пользователь входит в систему.

Моя проблема заключается в том, что всякий раз, когда я пытаюсь ввести URL-адрес для других маршрутов, мое состояние исчезает.Из того, что я понимаю из чтения других постов, это создает новую связь, в которой инициируются состояния?

Как сохранить то же соединение при вводе URL-адреса для других маршрутов?(http://localhost:3000/dorm/rooms)

Я довольно новичок в реакции-router-dom. Кто-нибудь может мне помочь?

Ниже приведен мой файл app.js:

import React from "react";
import { Router, Route, Switch } from "react-router-dom";
import { Container, Divider } from "semantic-ui-react";
import history from "../history";
import Home from "./Home";
import Navbar from "./Navbar";
import Login from "./Login";
import Rooms from "./room/Rooms";

const App = () => {
  return (
    <Container fluid>
      <Router history={history}>
        <div>
          <Navbar />
          <Switch>
            <Route path="/" exact component={Home} />
            <Route path="/login" exact component={Login} />
            <Route path="/dorm/rooms" exact component={Rooms} />
          </Switch>
        </div>
      </Router>
      <Divider />
    </Container>
  );
};

export default App;

НАВБАР

import React, { Component } from "react";
import { Link } from "react-router-dom";
import { connect } from "react-redux";
import { Menu, Icon, Button } from "semantic-ui-react";
import { logout } from "../actions/index";

class Navbar extends Component {
  state = {
    user: null
  };

  componentDidUpdate() {
    if (this.props.auth.username && !this.state.user) {
      this.setState({ user: this.props.auth.username });
    }
  }

  logout = async () => {
    await this.props.logout();
    await this.setState({ user: null });
  };

  renderAuthButton() {
    if (this.state.user) {
      return (
        <Button onClick={this.logout} basic color="red">
          Logout
        </Button>
      );
    } else {
      return (
        <Link to={"/login"}>
          <Button basic color="blue">
            Login
          </Button>
        </Link>
      );
    }
  }

  render() {
    console.log(this.state.user);
    return (
      <div
        style={{
          paddingTop: "4vh",
          paddingLeft: "2vw",
          paddingRight: "2vw",
          backgroundColor: "#FFF270"
        }}
      >
        <Menu color="grey" secondary>
          <Menu.Item name="home">
            <Icon name="home" />
            <Link to="/">Home</Link>
          </Menu.Item>
          <Menu.Menu position="right">{this.renderAuthButton()}</Menu.Menu>
        </Menu>
      </div>
    );
  }
}

const mapStateToProps = state => {
  return {
    auth: state.auth
  };
};

export default connect(
  mapStateToProps,
  { logout }
)(Navbar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...