ReactJS + マテリアル UI オートコンプリートのデフォルト値が機能しない

okwaves2024-01-25  8

閉まっている。この質問にはデバッグの詳細が必要です。現在回答を受け付けておりません。

質問を編集して、目的の動作、特定の問題またはエラー、問題の再現に必要な最短のコードを含めます。これは他の人が質問に答えるのに役立ちます。

閉鎖

3 年間前

この質問を改善してください

この質問で述べたのと同じパターンに従いましたが、異なる点は、「options」を別のコンポーネントから「props. CountryList」として渡していることです。誰かが「オプション」を小道具として渡すときに何を変更する必要があるのか​​教えてください。

1

コードサンドボックスを共有してください。そうすれば、一緒に作業できるようになります。同じコードです。

– ベルトディダ

2020 年 9 月 3 日 9:27

@bertdida : これがサンプル コードですandbox : この codesandbox.io/s/charming-snyder-q22gj について助けていただければ幸いです

– シャリンド

2020 年 9 月 3 日 10:45



------------------------

コントローラーのdefaultValue値として空の配列を渡しています - その場合、それをオートコンプリートの値として使用します。また、Autocomplete に defaultValue は必要ないと思います。

とにかく、以下のコードは動作するはずです

export default function AutoSelect({ options, selectedValue }) {
  const { control, setValue } = useForm();

  if (options.length === 0) {
    return null;
  }

  const defaultValue = options.find((i) => i.value === selectedValue);

  return (
    <Controller
      render={(props) => (
        <Autocomplete
          options={options}
          getOptionLabel={(option) => option.label}
          value={props.value}
          onChange={(e, values) => setValue("food", values)}
          renderInput={(params) => (
            <TextField
              {...params}
              label="Choose food"
              name={props.name}
              placeholder="Choose food"
              variant="outlined"
              fullWidth
            />
          )}
        />
      )}
      control={control}
      name="food"
      defaultValue={defaultValue}
    />
  );
}

4

ご説明ありがとうございます。それでもdefaultValueは表示されません。 「オプション」を取得するために別々の 2 つの API を呼び出しています。および「selectedValue」。 selectedValue (defaultValue) が設定される前にオートコンプリート コンポーネントがレンダリングされる可能性がありますか?すでにこれに 1 日を費やしましたが、運が悪かったです :(

– シャリンド

2020 年 9 月 3 日 15:30

1

@shalinds それは奇妙です。問題は親コンポーネントにあると思います。 API 呼び出しをシミュレートするためにコードサンドボックスを更新しました。ぜひチェックしてみてください。

– ベルトディダ

2020 年 9 月 4 日 0:58

親コンポーネントに問題があるようです。 CodeSaを正確にコピーしましたndbox のサンプルを自分のソリューションに貼り付けても、DefaultValue が表示されません。親コンポーネントには、さまざまな API を呼び出す 10 ~ 15 個のサブコンポーネントがあり、データのロードにも時間がかかります。前述したように、AutoComplete コンポーネントは、DefaultValue を設定する前にレンダリングを取得しているようです。

– シャリンド

2020 年 9 月 4 日 2:29

1

はい。そのため、(お気づきかと思いますが) API 呼び出しがまだ解決されていないときに読み込みスピナーをレンダリングしました。これにより、フェッチの進行中に AutoComplete コンポーネントがレンダリングされるのを回避できます。

– ベルディダ

2020 年 9 月 4 日 2:34

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。