我有一个应用程序组件,其中有两个孩子,
- a选择组件和
1.一按钮组件
import React from "react";
import { Button } from "@mui/material";
import SelectVariant from "./Components/SelectVariant";
import {category} from "./data";
import { nanoid } from "nanoid";
function App() {
return(
<div>
<SelectVariant
values = {category}
name = "Category"
/>
<Button variant="contained">Get</Button>
</div>
)
}
导出默认应用程序;'
我的“Select”组件是一个材质UI组件,它在其状态中保存其值
import * as React from 'react';
import InputLabel from '@mui/material/InputLabel';
import MenuItem from '@mui/material/MenuItem';
import FormControl from '@mui/material/FormControl';
import Select from '@mui/material/Select';
export default function SelectSmall(props) {
const [category, setCategory] = React.useState('');
const handleChange = (event) => {
setCategory(event.target.value);
};
const menuItems = props.values.map(ele => <MenuItem value={ele}>{ele}</MenuItem>)
return (
<FormControl sx={{ m: 1, minWidth: 120 }} size="small">
<InputLabel id="demo-select-small">{props.name}</InputLabel>
<Select
labelId="demo-select-small"
id="demo-select-small"
value={category}
label={props.name}
onChange={handleChange}
>
{menuItems}
</Select>
</FormControl>
);
}
我希望控制台记录单击按钮时Select组件保存的值Get
我应该怎么做呢?或者我应该在app组件中设置状态吗?
3条答案
按热度按时间byqmnocz1#
如果你不想使用相同的状态并将其保留在父组件中,那么你必须在父组件中创建一个状态,并将其setter传递给子组件,每次更新所需的状态时,从子组件更新在父组件中创建的状态,这样它们就会同步。
现在,您只需从父组件记录创建的状态。
我会选择第一种方法。
myzjeezk2#
你有两个选择:1)将状态从子组件提升到父组件,或者2)使用context API。
我偏爱API,因为它避免了prop drilling。
bwitn5fc3#
你可以使用props或者context hook来引用材料ui文档来在组件中应用值