简体   繁体   English

如何在 reactjs 中更改子组件 state

[英]how to change child component state in reactjs

I came across the following problem: I need to use another component's function inside a component:我遇到了以下问题:我需要在组件内部使用另一个组件的 function:

header.js header.js

export default function Header() {

  const [showModalLogin ,setShowModalLogin] = useState(false);

  return(
    <>
    <span>Hi,  <Link onClick={() =>{ setShowModalLogin(true)}}>login</Link> </span>
    {showModalLogin ? <LoginModal setShowModalLogin={setShowModalLogin}/> : ''}
    </>
  );
}

home.js主页.js

import Header from '../../components/header/header';

export default function Home() {

  return (
    <>
      <Header />
      <Link onClick={() =>{ setShowModalLogin(true)}}>open login</Link>
    </>
}

How do I do in home.js to call the setShowModalLogin function that is in header.js?如何在home.js中调用header.js中的setShowModalLogin function? I'm trying to use the context api too, but I still can't solve it.我也在尝试使用上下文api,但我仍然无法解决它。

You can just place useState in Header component and pass setShowModalLogin as props:您可以将 useState 放在 Header 组件中并将 setShowModalLogin 作为道具传递:

import Header from '../../components/header/header';

export default function Home() {
  const [isShowModalLogin ,setShowModalLogin] = useState(false);

  return (
    <>
      <Header isShowModalLogin={isShowModalLogin} setShowModalLogin={setShowModalLogin} />
      <Link onClick={() => setShowModalLogin(true)}>open login</Link>
    </>
}
export default function Header({ isShowModalLogin, setShowModalLogin }) {
  return(
    <>
    <span>Hi,  <Link onClick={() => setShowModalLogin(true)}>login</Link> </span>
    {isShowModalLogin ? <LoginModal setShowModalLogin={setShowModalLogin}/> : ''}
    </>
  );
}

Then you can do it in this way:然后你可以这样做:

  1. Create Context创建上下文
  2. Save useState inside将useState保存在里面
  3. Use it everywhere you need在任何需要的地方使用它
export const YourContext = createContext();

export const YourProvider = ({ children }) => {
  const [isShowModalLogin, setShowModalLogin] = useState(false);

  const value = {
    isShowModalLogin,
    setShowModalLogin
  };

  return <YourContext.Provider value={value}>{children}</YourContext.Provider>;
}
// App.js

const App = () => {
  return (
    <YourProvider>
      <AppContent />
    </YourProvider>
  )
}

So now you can use it like here:所以现在你可以像这里一样使用它:

import Header from '../../components/header/header';

export default function Home() {
  const { isShowModalLogin, setShowModalLogin } = useContext(YourContext);

  return (
    <>
      <Header isShowModalLogin={isShowModalLogin} setShowModalLogin={setShowModalLogin} />
      <Link onClick={() => setShowModalLogin(true)}>open login</Link>
    </>
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM