You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何在AddMarker与侧边栏兄弟组件间传递useState数组

解决方案

你这个场景最适合用状态提升的方案处理,既然两个组件的共同父级是App,直接把坐标数组的状态存在App里,再同步给两个子组件即可,具体修改步骤如下:


1. 修改App.js

把坐标状态移到App中定义,同时写好更新坐标的方法,分别传给侧边栏和AddMarker组件:

function App() {
  // 把原本存在AddMarker里的坐标数组提升到父组件App
  const [coordList, setCoordList] = useState([]);

  // 给AddMarker调用的新增坐标方法
  const addNewCoord = (newCoord) => {
    setCoordList(prev => [...prev, newCoord]);
  }

  return (
    <div className="App" >
      {/* 把坐标数组传给侧边栏组件 */}
      <Sidetabs coordList={coordList}/>

      <MapContainer center={[40.44695, -345.23437]} zoom={3}>
        ..............
        {/* 把新增坐标的方法传给AddMarker */}
        <AddMarker addNewCoord={addNewCoord} />
      </MapContainer>
    </div>
  )
}

2. 修改AddMarker组件

删除组件内部的coord状态,直接调用父组件传过来的方法更新坐标:

// 接收父组件传的addNewCoord方法
function AddMarker({addNewCoord}){
  const map = useMapEvents({
    click: (e) => { 
      // 直接调用父组件方法新增坐标,不需要再在当前组件存状态
      addNewCoord(e.latlng);
     },
  // 剩下的原有逻辑保留
  ...
}

3. 修改侧边栏VerticalTabs组件

接收父组件传的coordList参数,在路径点面板里渲染坐标列表即可:

// 接收父组件传的coordList
export default function VerticalTabs({coordList}) {
  const [value, setValue] = React.useState(0);

  const handleChange = (event, newValue) => {
    setValue(newValue);
  };

  return (
    <Box
      sx={{ flexGrow: 1, bgcolor: 'background.paper', display: 'flex', height: 224 }}
    >
      <Tabs
        orientation="vertical"
        value={value}
        onChange={handleChange}
        aria-label="Vertical tabs"
        sx={{ borderRight: 1, borderColor: 'divider' }}
      >
        <Tab label="Waypoints" {...a11yProps(0)} />
        <Tab label="Sorting" {...a11yProps(1)} />
      </Tabs>
      <TabPanel value={value} index={0}>
        {/* 在这里渲染坐标列表,你也可以换成折叠面板组件 */}
        <ul>
          {coordList.map((coord, index) => (
            <li key={index}>
              标记{index+1}:纬度{coord.lat.toFixed(4)},经度{coord.lng.toFixed(4)}
            </li>
          ))}
        </ul>
      </TabPanel>
      <TabPanel value={value} index={1}>
        Sorting
      </TabPanel>
    </Box>
  );
}

内容的提问来源于stack exchange,提问作者Diana Sk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:15:04