Как я могу указать значение, которое устраняет это предупреждение пользовательского интерфейса материала?

#javascript #reactjs #axios #material-ui #warnings

Вопрос:

Я извлекаю данные API (имена категорий) из серверной части (Node.js) к интерфейсу (реагировать). На данный момент моя цель-заполнить выбранный компонент в пользовательском интерфейсе Material. Для извлечения данных API я использую Express и запрос на серверной части; Axios на интерфейсной части. По-видимому, это работает, компонент Select получил правильный список опций, но появилось это предупреждение консоли:

Материал-пользовательский интерфейс: вы указали значение ` вне диапазона » для выбранного компонента. Рассмотрите возможность предоставления значения, соответствующего одному из доступных вариантов или «. Доступные значения animal :, career , celebrity , dev , explicit , fashion , food , history , money , movie , music , political , religion , science , sport , travel .

Эти ссылочные значения взяты из полученных данных API, но я не знаю, как это исправить. Любая помощь приветствуется. Вот мой код:

 export default function Home() {
  const classes = useStyles();
  const [list, setList] = useState([]);
  const [categoryName, setCategoryName] = useState([]);

  useEffect(() => {
    axios
      .get("/getCategories")
      .then((response) => {
        setList(response.data.categories);        
      })
      .catch((e) => {
        console.log(e.response.data);
      });
  }, []);

  const handleChange = (event) => {
    setCategoryName(event.target.value);    
  };

  return (
    <div className={classes.root}>      
      <FormControl>
        <InputLabel id="category-label">Category</InputLabel>
        <Select         
          labelId="category-label"
          id="category"
          value={categoryName}
          onChange={handleChange}
        >
          {list.map((item) => (
            <MenuItem key={item} value={item}>
              {item}
            </MenuItem>
          ))}
        </Select>
      </FormControl>
    </div>
  );
}
 

Ответ №1:

добавьте это defaultValue = "" вот так <Select ... defaultValue="" >

Для получения более подробной информации, пожалуйста, обратитесь к этому github

Ответ №2:

все хорошо, но тебе просто нужно кое-что изменить, прежде чем

 const [categoryName, setCategoryName] = useState([]);
 

после

  const [categoryName, setCategoryName] = useState('');
 

не используйте значение по умолчанию CategoryName в качестве массива или имени(из-за эффекта использования, выполняемого после рендеринга. поэтому первое время значение не задано после useEffect звонок своего значения, установленного в вашей категории список и проверить, если значение существует в списке категория в противном случае он будет генерировать предупреждение) предупреждение означает, что вы добавляете значение(значение={категория}) в SELECT, которые не в вашем списке наилучшим образом, используя значение по умолчанию вариант, но в любом случае вы просто установите категория значения как пустые и вам просто узнать о useEffect и как это работает
https://stackblitz.com/edit/react-hmdhsf?file=src/home.js

Ответ №3:

Вы должны инициализировать categoryName как пустую строку вместо Array