Heim  >  Fragen und Antworten  >  Hauptteil

Verfügbarmachen der useState-Setter-Funktion für den globalen Bereich in React

Ich bin gespannt, ob mir so etwas gelingt:

const [panelActive, setPanelActive] = useState(false);
(globalThis as any).setPanelActive = setPanelActive;

useEffect(() => console.log(panelActive), [panelActive])

Aus irgendeinem Grund wird es nicht ausgelöst, wenn ich es von außen rufe. setPanelActive 函数时,useEffect

Sollte ich eine Art Wrapper oder Kontext erstellen? Anbieter, damit es funktioniert?

P粉299174094P粉299174094429 Tage vor849

Antworte allen(2)Ich werde antworten

  • P粉587970021

    P粉5879700212023-09-12 09:11:45

    如果您希望 globalThis.setPanelActive 与您正在执行的分配中的 setPanelActive 一样工作,那么您就错了,挂钩被设计为在组件范围内工作在这种情况下,您必须在更高的级别上使用 上下文,如下所示:

    const App = () => {
      export const PanelConext = createContext(); // import createContext
      const [panelActive, setPanelActive] = useState(false);
      //...
    
      useEffect(() => console.log(panelActive), [panelActive])
    
      
      return (
        <PanelConext.Provider value={{ panelActive, setPanelActive}}>
          //..
        </PanelConext.Provider>
      );
    };
    
    const Component = () => {
      const { panelActive, setPanelActive} = useContext(PanelContext); // import `PanelContext`from App and `useContext` from react
      //...
    };
    

    现在,当您从任何组件使用 setPanelActive 时,useEffect 应该触发

    Antwort
    0
  • P粉333186285

    P粉3331862852023-09-12 00:33:05

    感谢大家的参与。经过对 @hatana 提到的内容进行一些研究后,我找到了一个解决方案 - @hatana 。 com/DawChihLiou/eventbus-demo" rel="nofollow noreferrer">事件总线。它完全符合我的要求。

    Antwort
    0
  • StornierenAntwort