javascript ReactJS:从子组件的状态中检索值

isr3a4wc  于 2023-03-16  发布在  Java
关注(0)|答案(3)|浏览(134)

我有一个应用程序组件,其中有两个孩子,

  1. 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组件中设置状态吗?

byqmnocz

byqmnocz1#

如果你不想使用相同的状态并将其保留在父组件中,那么你必须在父组件中创建一个状态,并将其setter传递给子组件,每次更新所需的状态时,从子组件更新在父组件中创建的状态,这样它们就会同步。
现在,您只需从父组件记录创建的状态。
我会选择第一种方法。

myzjeezk

myzjeezk2#

你有两个选择:1)将状态从子组件提升到父组件,或者2)使用context API
我偏爱API,因为它避免了prop drilling。

bwitn5fc

bwitn5fc3#

你可以使用props或者context hook来引用材料ui文档来在组件中应用值

相关问题