У меня возникла проблема, которая не должна возникать:
См. initialUserState
устанавливается в зависимости от результата троичного операция. Однако эта операция должна возвращать false здесь (поскольку в объекте context
нет свойства user
. (Вы можете увидеть это в отладчике ниже)
Что здесь может происходить?
Данные взяты из предыдущего запроса в приложении Next JS (я использую приватный режим Firefox и Firefox). Это происходит только тогда, когда запрос выполняется быстро рядом друг с другом. Поэтому я думаю, что это проблема параллелизма, но не могу понять, почему javascript не сработает с этим условием. Как initialUserState
удерживает это значение, если я объявляю его снова здесь.
import {userInitialState} from "./UserContext";
import {listInitialState} from "./ListContext";
import {createContext, useState} from "react";
/**
* Sets the initial application context
*/
export default class ApplicationContext {
userContext;
listContext;
/**
* Will set the initial application state.
* @param context
*/
constructor(context) {
let initialUserState = context.hasOwnProperty('user') ? context.user : userInitialState;
const userContextUpdater = () => {
let [state, setState] = useState({...initialUserState})
return [state, setState];
}
this.userContext = createContext(userContextUpdater);
let initialListState = context.hasOwnProperty('list') ? context.list : listInitialState;
const listContextUpdater = () => {
let [state, setState] = useState({...initialListState})
return [state, setState];
}
this.listContext = createContext(listContextUpdater);
}
/**
* Returns the UserContext
* @returns {*}
*/
getUserContext = () => {
return this.userContext;
}
/**
* Returns the List context
* @returns {*}
*/
getListContext = () => {
return this.listContext;
}
}
_app. js
import ApplicationContext from "../lib/Context/ApplicationContext";
import {useContext} from "react";
export default function RankerApp({Component, pageProps}) {
const applicationContext = new ApplicationContext(pageProps);
const ListContext = applicationContext.getListContext();
const UserContext = applicationContext.getUserContext();
const [listState, setListState] = useContext(ListContext)();
const [userState, setUserState] = useContext(UserContext)();
return (
<ListContext.Provider value={[listState, setListState]}>
<UserContext.Provider value={[userState, setUserState]}>
<Component {...pageProps} applicationContext={applicationContext}/>
</UserContext.Provider>
</ListContext.Provider>
);
}
UserContext. js
export const userInitialState = {
currentUserId: undefined,
users: {},
}
Это сводит меня с ума, похоже, что это какая-то проблема параллелизма, я не могу объяснить это иначе, так как это не ' Это происходит, если запрос разнесен во времени