gpt4 book ai didi

javascript - 如何在 React 中将状态从钩子(Hook)传递到 App 钩子(Hook)中显示?

转载 作者:行者123 更新时间:2023-12-02 22:11:02 24 4
gpt4 key购买 nike

如何将 info 的状态(数据)发送到 App hook,以便我可以在 div 中显示属性? setInfo(info) 存储我想要在 map Hook 上显示的数据,当我在 _onClick< 中 console.log(info) 时,我可以看到所有属性。我对如何在应用程序中使用和显示它感到困惑。感谢您的帮助。

应用程序

const App = () => {

return (
<div className="App">
<div className="inner-left map-container">
<Map />
</div>
<div className="inner-right info-container">
<Nav />
<Search />
<div id="info_side">
{info} // throws an error undefined
</div>
</div>
</div>
);
}

export default App;

map

const Map = () => {
...
const [info, setInfo] = useState(null)

...

const _onClick = event => {
const { features } = event;
const info = features && features.find(f => f.layer.id === 'icon');
setInfo(info); // This is what I would like to use in App
}

return (
<ReactMapGL
{...viewport}
onViewportChange={_updateViewport}
width="100%"
height="100%"
mapStyle={mapStyle}
mapboxApiAccessToken={TOKEN}
onHover={_onHover}
onClick={_onClick}>

<Source id="my-data" type="geojson" data={geojson}>
<Layer {...icon} />
</Source>

<div style={navStyle}>
<NavigationControl onViewportChange={_updateViewport} />
...
</div>
</ReactMapGL>
);
}

export default Map;

最佳答案

您可以将回调 Prop 传递给子级。

应用程序

const App = () => {

const [info, setInfo] = useState(); // local info state

const displayInfo = () => {
// this is where I would hope to return the <div>'s with data such as <div>info.Company</div>
// access current copy of info
}

return (
<div className="App">
<div className="inner-left map-container">
<Map onInfoChange={setInfo} /> // pass info state setter to child
</div>
<div className="inner-right info-container">
<Nav />
<Search />
<div id="info_side">
{displayInfo}
</div>
</div>
</div>
);
}

export default App;

map

const Map = ({
onInfoChange, // passed callback prop
}) => {
...
const [info, setInfo] = useState(null)

// use an effect hook to call callback whenever info updates
useEffect(() => {
onInfoChange(info); // pass info back to parent
}, [info]);

const _onClick = event => {
const { features } = event;
const info = features && features.find(f => f.layer.id === 'icon');
setInfo(info); // This is what I would like to use in App
}

return (
<ReactMapGL
{...viewport}
onViewportChange={_updateViewport}
width="100%"
height="100%"
mapStyle={mapStyle}
mapboxApiAccessToken={TOKEN}
onHover={_onHover}
onClick={_onClick}>

<Source id="my-data" type="geojson" data={geojson}>
<Layer {...icon} />
</Source>

<div style={navStyle}>
<NavigationControl onViewportChange={_updateViewport} />
...
</div>
</ReactMapGL>
);
}

export default Map;

在这一点上,我应该指出,您现在在两个组件中存储了重复的状态,因此最好将信息状态和逻辑提升到最近的共同祖先(App),然后将信息作为 Prop 传递给需要它的组件(Map)。 单一事实来源原则。或者正如其他人指出的那样,切换到全局状态管理系统,例如 redux,或者使用 React Context 推出自己的系统(即react-redux 在幕后使用的内容)。

关于javascript - 如何在 React 中将状态从钩子(Hook)传递到 App 钩子(Hook)中显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59558637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com