reactjs 如何从父项中清除MUI自动完成字段?

mwkjh3gx  于 2023-11-18  发布在  React
关注(0)|答案(1)|浏览(160)
//PARENT COMPONENT

const App = () => {
const [filterData, setFilterData] = useState({
    //field id and names
    soldTo:"",
    soldToName:"",      
});

const handleChangeAuto = (name, value) => {
    setFilterData({
      ...filterData,
      soldTo: value !== null ? value.id : "",
      soldToName: value !== null ? value.name : "",
    });
  };

const removeTag = () => {
    setFilterData({ ...filterData, soldTo: "", soldToName: "" });
  };
return (<>
<FilterAutoCompleteField
                  label="Sold To"
                  name="soldTo"
                  value={filterData.soldToName}
                  onChangeAuto={handleChangeAuto}
/>
</>)

**<Button onClick={removeTag}>Reset</Button>**

字符串
主应用程序组件具有filterData state和用于将自动完成数据分配给过滤器的DataChangeAuto函数。
然后在父“应用程序”组件中,重置按钮触发removeTag函数,该函数清除过滤器值。这应该重置自动完成文本字段,但它没有这样做。

//CUSTOM AUTOFIELD COMPONENT
const FilterAutoCompleteField = ({
  label,
  name,
  value,
  onChangeAuto,
}) => {
  data=[{id:0, name:"yo"},{id:1, name:"hello"}, {id:2, name:"wow"}]

  const { id } = useId();
 

  return (
    <Grid item xs={12} md={4}>
      <InputLabel>{label}</InputLabel>
      <Autocomplete
        disablePortal
        id={id}
        options={data}
        value={value}
        inputValue={value}
        getOptionLabel={(option) => option.name}
        onChange={(event, newValue) => {
          onChangeAuto(name, newValue);
        }}
        renderInput={(params) => <TextField {...params} />}
      />
    </Grid>
  );
};


当我点击重置按钮时,在控制台窗口中“filterData”被重置,但自动完成文本字段仍然有旧字段。这就像FilteredAutoComplete字段没有更新或呈现。
我尝试在removeTag中传递null值。这也不起作用。

编辑:这里,我在filterData中传递了soldTo和soldTo项。但该对象是通过变量动态传递的。这导致它无法呈现该部分。如何在filterData状态下传递filterObject时修复此问题。

const filterObject = [{soldTo:"", soldToName:""}]
  const [filterData, setFilterData] = React.useState({
    //field id and names
    // soldTo: '',
    // soldToName: '',
    ...filterObject
  });


虽然filterData状态已更改。自动完成中的文本未清除。以下是链接:https://stackblitz.com/edit/stackblitz-starters-8d5hed?file=src%2FApp.js

vlju58qv

vlju58qv1#

我只是在编译时发现了一个错误,我做了一些调整,代码本身很好。我做的调整:

  • 使变量数据的正确声明const data = ....
  • 移除状态在设置状态上扩散
  • 删除useId钩子

这里是代码的链接:StackBlitz
也许你可以检查的另一件事是组件导入

相关问题