Хорошо, я понял это.
Я использовал use-global-hook , и это стало очень просто.
После установки use-global-hook через
npm install -s use-global-hook
Я создал 2 новых файла в каталоге / src / hooks:
/ src / hooks / storeMainExpansionState / store / index. js содержит номер шага, на котором находится пользователь, и который будет использоваться степпером для выделения соответствующего шага:
import React from "react";
import useGlobalHook from "use-global-hook";
import * as actions from "../act";
const initialState = {
counter: 0
};
const useGlobal = useGlobalHook(React, initialState, actions);
export default useGlobal;
/ src / hooks / storeMainExpansionState / act / index. js содержит функцию, которую мои панели форм и расширений вызывают для установки этого значения:
export const setCounter = (store,step) => {
var counter = 0;
var step = step;
if (step == 'panel1') {
counter = 0;
}
if (step == 'panel2') {
counter = 1;
}
if (step == 'panel3') {
counter = 2;
}
if (step == 'panel4') {
counter = 3;
}
if (step == 'panel5') {
counter = 4;
}
if (step == 'panel6') {
counter = 5;
}
if (step == 'panel7') {
counter = 6;
}
store.setState({ counter });
};
В моем существующем файле FormElements.tsx я внес следующие изменения:
добавил этот импорт
import useGlobal from "../../../hooks/storeMainExpansionState/store";
добавил это в мою функцию по умолчанию:
const [globalState, globalActions] = useGlobal();
добавил это в мою функцию, которая отключается при расширении панели:
globalActions.setCounter(panel);
В моем существующем файле Stepper.tsx я сделал следующие изменения:
Я добавил этот импорт:
import useGlobal from "../../../hooks/storeMainExpansionState/store";
Я добавил это объявление в функцию по умолчанию:
const [globalState, globalActions] = useGlobal();
Я добавил это туда, где я возвращаю шаговый компонент и установил активный шаг:
<StepperComponent activeStep={globalState.counter} orientation="vertical" className="stepperComponent">
Теперь это работает, и степпер (Stepper.tsx) выделяет соответствующий активный шаг в зависимости от того, какая панель развернута в основной форме (FormElements.tsx), например:
И теперь самое интересное: у меня есть шаг, на котором пользователь хранится глобально, поэтому любые другие новые функции, которые в нем нуждаются, могут просто импортировать и вызывать глобальную переменную следующим образом:
import:
import useGlobal from "../../../hooks/storeMainExpansionState/store";
объявлять:
const [globalState, globalActions] = useGlobal();
звонить:
{globalState.counter}
Easy Peasy.