Итак, в настоящее время я работаю над приложением MERN, которое успешно сохраняет токены JWT через библиотеку localstorage , выживая при любых попытках refre sh (новые пользователи появляются в базе данных, et c, бэкэнд все работает как задумано).
Проблема заключается в том, что в приложении внешнего интерфейса React 'user'
по умолчанию установлено 'null'
в состоянии контейнера, поэтому несоответствие - это то, что не позволяет регистрировать пользователей при повторном рендеринге, несмотря на JWT. Я застрял на этом уже более суток, пытался реализовать множество возможных решений, получил помощь от моих инструкторов и т. Д. c, ничего не дает желаемого результата - есть ли у кого-нибудь совет?
Я прикрепил код из своего контейнера для справки (извините за беспорядок, я слишком расстроен этой штукой, чтобы делать с этим много), Кроме того, у меня также есть куча других Компоненты и файлы, которые так или иначе взаимодействуют с моим контейнером, не будут прикреплять их сейчас, но если кто-то почувствует, что дополнительный контекст необходим, чтобы помочь, тогда я сделаю это. Спасибо!
import React, { Component } from "react";
import { getItems } from "../services/items";
import Routes from "../routes";
import Header from "../screens/Header";
import { verifyToken } from '../services/auth'
export default class Container extends Component {
constructor(props) {
super(props);
this.state = {
user: null,
items: [],
isLoggedIn: false
};
}
async componentDidMount() {
// const user = await verifyToken();
// if (user) {
try {
const items = await getItems();
this.setState({
items,
isLoggedIn: true
});
}
catch (err) {
console.error(err);
}
}
addItem = item =>
this.setState({
items: [item, ...this.state.items]
});
editItem = (itemId, item) => {
const updateIndex = this.state.items.findIndex(
element => element._id === itemId
),
items = [...this.state.items];
items[updateIndex] = item;
this.setState({
items
});
};
destroyItem = item => {
const destroyIndex = this.state.items.findIndex(
element => element._id === item._id
),
items = [...this.state.items];
if (destroyIndex > -1) {
items.splice(destroyIndex, 1);
this.setState({
items
});
}
};
setUser = user => this.setState({ user });
//verifyUser = user => (localStorage.getItem('token')) ? this.setState({ user, isLoggedIn: true }) : null
clearUser = () => this.setState({ user: null });
render() {
// const token = localStorage.getItem('token');
// console.log(token)
const { user, items } = this.state;
return (
<div className="container-landing">
<Header user={user} />
<main className="container">
<Routes
items={items}
user={user}
setUser={this.setUser}
addItem={this.addItem}
editItem={this.editItem}
destroyItem={this.destroyItem}
clearUser={this.clearUser}
//verifyUser={this.verifyUser}
/>
</main>
</div>
);
}
}