Наконец, , я обнаружил и изучил новые концепции React-Context API. Вы можете оформить заказ здесь Ссылка на StackBlitz
Для управления глобальными состояниями React предоставляет context-api. Используйте только тогда, когда у вас есть несколько уровней свойств компонентов, передаваемых в дереве компонентов сверху вниз. Я использовал очень небольшой пример, чтобы понять api контекста для моего другого варианта использования.
Первый из всего, что нам нужно, чтобы использовать два контекста ..
- createContext [ используется для создания глобального контекста состояния]
- useContext [используется для получения состояний из контекста из дочернего компонента].
Для работы с контекстом я создал его <context.Provider>
составная часть. и все задачи управления состоянием выполняются только на этом уровне компонентов. все дочерние компоненты просто отправляют события о том, что делать. и глобальный контекст компонента провайдера изменяется соответственно.
сначала , Создать контекст ..
export interface ItodoContext{
todoState? : Itodo[];
addNewTodoState?: (state?: string) => void;
removeTodoItemByIndex? : (index?: number) => void;
}
export const todoContext = createContext<ItodoContext[]>([{}]);
Так как я использую функциональный компонент React-Typescript в соответствии с интерфейсом контекста я определил все задачи состояний. Я передал всю TodoState, функцию для управления TodoState, например addNewTodoState, removeTodoItemByIndex.
затем создаю Provider of context ..
const allTodoStates = {
todoState,
addNewTodoState,
removeTodoItemByIndex
}
return(
<todoContext.Provider value = { [allTodoStates]}>
{props.children}
</todoContext.Provider>
)
Затем я устанавливаю Provider как родительский компонент в дереве в компоненте index.tsx вот так ..
const App: FC = () => {
return (
<div className="h-100 w-100">
<TodoStateProvider>
<Navbar />
<div className="container">
<TodoForm />
<TodoListLineItem />
</div>
</TodoStateProvider>
</div>
);
}
См. выше все компоненты, теперь дочерние для <TodoStateProvider>
родительского компонента.
Когда мне нужно добавить новое состояние в контекст, находится внутри <TodoForm>
и как мы можем Состояние добавления выглядит так, как показано ниже:
const [{addNewTodoState}] = useContext(todoContext);
const sendTodoItem = (e) => {
addNewTodoState(todoInput.trim());
}
и так далее .. Компонент провайдера имеет свойство value
, и мы можем получить эти свойства от дочернего элемента с помощью ловушки useContext (). как мы использовали выше. См. Полную рабочую демонстрацию, которую я прикрепил по ссылке выше на StackBlitz.