Maison  >  Questions et réponses  >  le corps du texte

"Comment activer l'événement onChange de MUI Autocomplete pour mettre à jour la valeur"

Je reçois les options de saisie semi-automatique de l'API et elle les obtient parfaitement et affiche également l'option sélectionnée renvoyée par l'API, mais le problème auquel je suis confronté est que peu importe que j'essaie de supprimer ou d'ajouter une valeur (catégorie), ce n'est pas le cas. t Aucune suppression ni aucun ajout ne sera effectué.

Codes de démonstration en ligneandbox

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>
  );
}

Sélectionnez les options PostsCats :

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>
  );
}

Je ne sais pas ce qui me manque ici, pourquoi je ne peux pas ajouter ou supprimer une balise de la saisie semi-automatique !

P粉649990273P粉649990273400 Il y a quelques jours686

répondre à tous(1)je répondrai

  • P粉512526720

    P粉5125267202023-09-16 14:02:30

    Mettez à jour votre tableau useEffectdependencies. https://legacy.reactjs.org/docs/hooks-effect.html []signifie appelé uniquement lors du montage

    Il sera appelé à chaque rendu

      useEffect(() => {
        const getPost = async () => {
          try {
            setCategories(postInfo[0].categories);
            setSelectedCategories(postInfo[0].categories);
          } catch (err) {}
        };
        getPost();
      }, []); //<--- 改变
    

    répondre
    0
  • Annulerrépondre