代码之家  ›  专栏  ›  技术社区  ›  Abhishek Vyas

useEffect不适用于自动选择下拉菜单

  •  0
  • Abhishek Vyas  · 技术社区  · 2 年前

    这种情况是,当用户保存新类别时,应使用新值重新呈现“类别”下拉列表。不幸的是,这种情况并没有发生。

    enter image description here

    我尝试了两种方法:

    1. 当相关性数组设置为 类别 变量在这种情况下,获取类别的调用是无限的,如下图所示。
      useEffect(() => {
        const fetchCategoryList = async () => {
          const data = await categoryApi.getAllDD();
          setCategory(data);
        };
        fetchCategoryList();
      }, [category]);
    

    enter image description here

    1. 当相关性数组设置为 类别长度 变量在这种情况下,useEffect根本不会被调用。
      const [category, setCategory] = useState([]);
    ..
    ..
    ..
      useEffect(() => {
        const fetchCategoryList = async () => {
          const data = await categoryApi.getAllDD();
          setCategory(data);
        };
        fetchCategoryList();
      }, [category.length]);
    
    
                <Autocomplete
                  disablePortal
                  id="ddCategory"
                  getOptionLabel={(option) => option.name}
                  getOptionKey={(option) => option.id}
                  options={category}
                  sx={{ width: 300 }}
                  renderInput={(params) => (
                    <TextField {...params} label="Parent Category" />
                  )}
                  size="small"
                  onChange={handleOnAutoCompleteInputChange}
                />
    
    .
    .
    .
    
              const handleOnAutoCompleteInputChange = (
                e: React.SyntheticEvent,
                value: any,
                reason: string
              ) => {
                setFormData((prevFormData) => ({
                  ...prevFormData,
                  parentId: value?.id,
                }));
              };
    
    

    知道为什么会发生这种事吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Maziar parsi    2 年前

    您不应该在useEffect挂钩上运行fetchCategoryList,而应该在单击保存按钮后运行此函数,例如:

     const handleClick = async()=>{
        // make request for save category or whatever you need to do
        const response = await request()
         // when we have response,then we ask for new category list
        if( res){
        const data = await fetchCategoryList();
        data && setCategoryList(data);
        }
      }