提问人:hitech 提问时间:11/13/2023 最后编辑:hitech 更新时间:11/16/2023 访问量:52
如何从父项中清除MUI自动完成字段?
How to clear MUI Autocomplete field from parent?
问:
//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>**
主 App 组件具有 filterData 状态和 handleChangeAuto 函数,用于将自动完成数据分配给筛选器。
然后在父“App”组件中,“重置”按钮会触发 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
答:
0赞
TheKritsakon
11/13/2023
#1
我只是在编译时发现了一个错误,我做了一些调整,代码本身很好。 我所做的调整:
- 对变量数据进行正确的声明
const data = ....
- 删除设置状态上的状态分布
- 删除 useId 钩子
这里代码的链接:StackBlitz
也许您可以检查的另一件事是组件导入
评论
0赞
hitech
11/13/2023
谢谢。当我在 2 天后可以访问代码时,我将实施建议的更改。如果它有效,我会告诉你。谢谢:)
0赞
hitech
11/16/2023
嗨,你能看看我的代码吗,@thekritsakon?我已经为问题添加了上下文。
上一个:在同一活动中自动填充数据
评论