typescript 获取React中父组件的子组件常量/状态

cbeh67ev  于 2022-12-24  发布在  TypeScript
关注(0)|答案(1)|浏览(201)

我有一个组件,它是一个像这样的MUI选项卡

<Box sx={{ width: "100%" }}>
  <Box sx={{ borderBottom: 1, borderColor: "divider" }}>
    <Tabs
      value={value}
      onChange={handleChange}
      aria-label="basic tabs example"
    >
      <Tab label="Item One" {...a11yProps(0)} />
      <Tab label="Item Two" {...a11yProps(1)} />
      <Tab label="Item Three" {...a11yProps(2)} />
    </Tabs>
  </Box>
  <TabPanel value={value} index={0}>
    <Child1 />
  </TabPanel>
  <TabPanel value={value} index={1}>
    <Child2 />
  </TabPanel>
  <TabPanel value={value} index={2}>
    Item Three
  </TabPanel>
  <Box>
    <Button onClick={submittab}>Submit</Button>
  </Box>
</Box>

如前所述,有两个子组件,其中包含一些文本字段。
我尝试实现的是读取parent中的子数据,并将其作为单个对象提交给API。
请帮帮忙
沙盒之下
https://codesandbox.io/s/naughty-shadow-u2icz1?file=/demo.tsx:1233-1962
请注意我是打字员
这是我的子组件1

import { FormLabel, TextField } from "@mui/material";
import react, { useState } from "react";

function Child1() {
  const clientObj = {
    user: {
      name: "",
      age: ""
    }
  };
  const [client, setClient] = useState(clientObj);

  const handlechange = (event: { target: { name: any; value: any } }) => {
    const { name, value } = event.target;
    setClient((prevState) => ({
      ...prevState,
      context: {
        ...prevState.user,
        [name]: value
      }
    }));
  };
  return (
    <>
      <FormLabel>Name</FormLabel>
      <TextField
        name="name"
        id="text-id"
        value={client.user.name}
        onChange={handlechange}
      />
      <FormLabel>Age</FormLabel>
      <TextField
        name="name"
        id="text-id"
        value={client.user.name}
        onChange={handlechange}
      />
    </>
  );
}

export default Child1;
jv4diomz

jv4diomz1#

您可以在父组件中使用一个状态,该状态将作为 prop 传递给子组件,以便子组件可以使用父组件的更新状态函数。
父代码:

const [state, setState] = useState()

<Child parentState={{state, setState}} />

儿童代码:

export function Child({parentState}) {
  const {parentStateValue, setParentState} = parentState
  const childTitle = 'Acme'
  return <button onClick={setParentState(e => {...e, childTitle })} >childTitle</button>

}

理想的情况是为您的孩子提供密钥,以便您可以在状态中独立地管理他们的每个数据。

相关问题