export const AuthContext = createContext({})
<AuthContext.Provider value={{currentUser, setCurrentUser}}> // тут нельзя использовать квадратные скобки при передаче значения
const {currentUser, setCurrentUser} = useContext(AuthContext) // тут нельзя использовать квадратные скобки при деструктуризации
export const AuthContext = createContext([])
<AuthContext.Provider value={[currentUser, setCurrentUser]}> // тут нельзя использовать фигурные скобки при передаче значения
const [currentUser, setCurrentUser] = useContext(AuthContext) // тут нельзя использовать фигурные скобки при деструктуризации
import {
createContext,
useContext,
useState,
type FC,
type Dispatch,
type SetStateAction,
} from "react";
type TAuthContext = [string | null, Dispatch<SetStateAction<string>> | null];
export const AuthContext = createContext<TAuthContext>([null, null]);
export const Form: FC = () => {
const [currentUser, setCurrentUser] = useContext(AuthContext);
return <>1</>;
};
export const App: FC = () => {
const [currentUser, setCurrentUser] = useState<string | null>(null);
return (
<>
<AuthContext.Provider value={[currentUser, setCurrentUser]}>
<Form />
</AuthContext.Provider>
</>
);
};
interface MutableRefObject<T> {
prev: null | HTMLParagraphElement;
}
declare module 'lib-name' {
interface MutableRefObject<T> {
prev: null | HTMLParagraphElement;
}
}
declare module 'lib-name/full/path/to/declaration.ts' {
interface MutableRefObject<T> {
prev: null | HTMLParagraphElement;
}
}
interface MySuperMutableRefObject extends MutableRefObject<T> {
prev?: null | HTMLParagraphElement;
}
async function multiStep() {
await step1();
if (stop) throw new Error(stop);
await step2();
if (stop) throw new Error(stop);
await step3();
if (stop) throw new Error(stop);
}
и никак красивее не сделать. function* multiStep() {
yield step1();
yield step2();
yield step3();
}
useMemo
нужен, чтобы при передаче значения как prop
в низлежащий memo
компонент не происходила перерисовка оного если не было изменений(+при передаче как зависимость в другой хук, тот не срабатывал заново).useMemo
и пойдёт водопадом перерисовка на каждый чих каждого компонента по всему дереву вниз. И именно это является основной причиной тормозов в React, а не какие-то там мифические сложные вычисления.useMemo
"только в узких местах" и нигде больше. Прикол в том, что с таким подходом при разрастании проекта никакого "узкого места" просто нет, тормозить начинает просто потому, что складываются тысячи микротормозов от тысяч перерисовок тысяч компонентов: наступает то самое "потом" и тут придётся переписывать с useMemo
чуть ли не весь проект, чтоб снизить эти тормоза.useMemo
стараются таки использовать заранее в каждом месте, где оно потенциально нужно. Некоторые радикальные философии вообще предполагают использование useMemo
просто всегда, без исключений.:) Next JS это только про SSR
Next JS это тот же реакт в котором сразу есть все необходимые пакеты для работы с ним или он все же медленней обычного spa приложения на реакте с пакетами?
что в нексте реакт всегда обращается к своему серверу для SSR
а у обычного реакта мы фетчем просто запросы шлем, когда все spa приложение очень быстро работает без лишних запросов на сервер
app.options('/user', cors());
app.post('/user', cors(), ....);