繁体   English   中英

将数据从子组件传递到父组件/React 钩子

[英]Passing data from child to parent component / React hooks

有人能告诉我是否有办法将黑暗变量从 Navbar 组件传递到 App 组件,这里是我的 Navbar 组件中包含状态的一小部分:

function Navbar({search, handleSearch, region, handleChange, number}){

const [dark , setDark] = useState(false)
function handlThem(){
    setDark(prevThem=> !prevThem )
  }

return(
    <div className="navbar" style={ dark ? {backgroundColor : "#333"} : null}>
  )
}

我想在App组件中传递dark以更改并使用它来更改它的类或切换以更改背景,例如style={ dark ? {backgroundColor : "#333"} style={ dark ? {backgroundColor : "#333"}应用组件:

function App() {

 return (
     <div className="App">
       <Body />
     </div>
   );
}

这是React Context 的一个很好的用例。 我提供了一个使用 hooks API 的示例。 您可以创建一个上下文,然后在与提供程序一起包装的任何组件中使用值(状态和状态设置器)。

 const ThemeContext = React.createContext(); function App() { const [dark , setDark] = React.useState(false); return ( <ThemeContext.Provider value={{ dark, setDark }}> <Body /> </ThemeContext.Provider> ); } function Navbar() { const value = React.useContext(ThemeContext); return ( <div>Navbar<button onClick={() => value.setDark(true)}>Change to Dark</button></div> ); } function Body() { const value = React.useContext(ThemeContext); return ( <div style={ value.dark ? {backgroundColor : "#333"} : null}> <Navbar /> <div>Rest of the body</div> </div> ); } ReactDOM.render( <App />, document.getElementById("root") );
 <script src="https://unpkg.com/react@16/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div id="root" />

尝试这个

应用程序.js

function App() {
 function getTheme(themeValue) {
   console.log(themeValue);
 }
 return (
     <div className="App">
       <Body getTheme={getTheme}/>
     </div>
   );
}

导航栏.js

function Navbar({search, handleSearch, region, handleChange, number, getTheme}){

const [dark , setDark] = useState(false)
function handlThem(){
    const theme = !dart;
    setDark(prevThem=> theme )
    getTheme(theme);
  }

return(
    <div className="navbar" style={ dark ? {backgroundColor : "#333"} : null}>
  )
}

当我传递给 body 时,你传递给 Navbar 组件,你没有发布 body 组件,这就是为什么传递给 body 组件并在 Navbar 中访问的原因。 您可以根据您的要求进行更改。

暂无
暂无

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

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