我正在從API中獲取自動(dòng)完成選項(xiàng),它完美地獲取到了,并且還顯示了從API返回的已選擇選項(xiàng),但我面臨的問(wèn)題是,無(wú)論我嘗試刪除還是添加一個(gè)值(類別),它都不會(huì)刪除或添加。
在線演示Codesandbox
PostInfo.jsx:
import SelectPostsCatsOptions from "../../components/autocomplete/SelectPostsCatsOptions"; import postInfo from "./postInfo.json"; export default function PostInfo() { const [categories, setCategories] = useState([]); const [selectedCategories, setSelectedCategories] = useState([]); useEffect(() => { const getPost = async () => { try { setCategories(postInfo[0].categories); setSelectedCategories(postInfo[0].categories); } catch (err) {} }; getPost(); }); return ( <div className="PostInfoPage"> <> <div> <form> <div> <h3>帖子類別:</h3> <SelectPostsCatsOptions selectedCategories={selectedCategories} setSelectedCategories={setSelectedCategories} onChange={(event, newSelectedCategories) => setSelectedCategories(newSelectedCategories) } value={selectedCategories} /> <p>已選擇的類別:</p> </div> </form> </div> </> </div> ); }
選擇PostsCatsOptions:
import categories from "./postsCategories.json"; export default function SelectPostsCatsOptions({ selectedCategories, setSelectedCategories, onChange, value }) { return ( <div> <Autocomplete id="categories" disablePortal multiple getOptionLabel={(category) => category.catName} options={categories} disableGutters isOptionEqualToValue={(option, value) => option.catName === value.catName } renderOption={(props, categories) => ( <li {...props} key={categories.id}> {categories.catName} </li> )} renderTags={(value, getTagProps) => value.map((option, index) => ( <Chip key={option.id} label={option.catName} {...getTagProps({ index })} /> )) } renderInput={(params) => ( <TextField {...params} placeholder="類別" /> )} value={value} onChange={onChange} /> </div> ); }
我不知道我在這里漏掉了什么,為什么我不能從自動(dòng)完成中添加或刪除一個(gè)標(biāo)簽!
更新你的useEffect
依賴數(shù)組。
https://legacy.reactjs.org/docs/hooks-effect.html
[]
意味著只在掛載時(shí)調(diào)用
它在每次渲染時(shí)都會(huì)被調(diào)用
useEffect(() => { const getPost = async () => { try { setCategories(postInfo[0].categories); setSelectedCategories(postInfo[0].categories); } catch (err) {} }; getPost(); }, []); //<--- 改變