Я работаю над тем, где мне нужно поддерживать состояние уровня приложения, то есть глобальное состояние, я использую для этого useContext
и useReducer
.
Так что я делаю на кнопке щелкните Я настраиваю свой контекст, а затем использую его, как мое приложение, зарегистрировав поставщика в моем App.js
.
Я знаю, почему я использую свои данные, потому что сначала я устанавливаю начальное состояние на null, вот почему, когда я обновляю sh страницу, которая снова устанавливает значение null, но мое требование заключается не в том, чтобы после нажатия кнопки я хотел сохранить эти данные как глобальное состояние, чтобы я мог использовать их в дальнейшем
Но это не должно быть так, я хочу сделать свои данные глобальными и при refre sh они не должны теряться
Мой код
Мой файл контекста
import React, { useReducer, createContext } from "react";
const initialstate = {
someData: null
};
const MyContext = createContext({
someData: null,
click_btn: d => {}
});
const MyReducer = (state, action) => {
switch (action.type) {
case "BTNCLICKED":
return {
...state,
someData: action.payload
};
default:
return state;
}
};
const MyProvider = props => {
const [state, dispatch] = useReducer(MyReducer, initialstate);
const click_btn = d => {
dispatch({
type: "BTNCLICKED",
payload: d
});
};
return (
<MyContext.Provider
value={{ someData: state.someData, click_btn }}
{...props}
/>
);
};
export { MyContext, MyProvider };
Мой домашний код, в котором я устанавливаю контекст
import React, { useContext, useState } from "react";
import history from "../History/history";
import { MyContext } from "../context/testContext";
function Test() {
const context = useContext(MyContext);
const [data, setdata] = useState(null);
const clickEvt = () => {
setdata("Setting data");
context.click_btn(data);
};
return (
<div>
<input type="button" onClick={clickEvt} value="Click Me" />
</div>
);
}
export default Test;
И мое приложение. js файл
import React from "react";
import "./styles.css";
import { MyProvider } from "./context/testContext";
import { Router } from "react-router-dom";
import history from "./History/history";
import Routes from "./myRoutes";
export default () => {
return (
<MyProvider>
<Router history={history}>
<div className="App wrapper">
<Routes />
</div>
</Router>
</MyProvider>
);
};
Пожалуйста, проверьте рабочий код Мои коды и ссылка на ящик
Пожалуйста, проверьте инструменты разработчика React
Когда я обновляю sh инструмент разработчика страниц