我正在尝试使用我将选择并用于表单数据的选项从 react Material UI 库中填充 Select Component,我可以填充 Select,但它不会让我选择任何选项!这是代码:
import React, { useState, useEffect } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Box from '@material-ui/core/Box';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
import InputLabel from '@material-ui/core/InputLabel';
import { spacing } from '@material-ui/system';
import Card from '@material-ui/core/Card';
import Button from '@material-ui/core/Button';
import Typography from '@material-ui/core/Typography';
import { CardHeader, TextField, CircularProgress } from '@material-ui/core';
import { useDispatch, useSelector } from 'react-redux';
import { movieAction } from '../actions/movieActions';
import { IAppState } from '../store/store';
import axios from 'axios';
const GenreSelect = () => {
const dispatch = useDispatch()
const [genreChoice, setGenreChoice] = useState('')
const getGenres = () => {
console.log('actions dispatched')
dispatch(movieAction())
}
const handleGenreChange = (event: React.ChangeEvent<{ value: unknown }>) => {
setGenreChoice(event.target.value as string);
console.log(event.target.value)
};
useEffect(() => {
getGenres()
}, [])
const genres = useSelector((state: IAppState) => state.movieState.genres);
const List = () => genres.map((genre: any) => {
return <MenuItem key={genre.id} value={genre.id}>{genre.name}</MenuItem>
})
return (
<>
<InputLabel htmlFor="demo-simple-select-label">Genres</InputLabel>
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
value={genreChoice}
onChange={handleGenreChange}
>
<List></List>
</Select>
</>
)
}
const MovieForm = () => {
return (
<>
<h1>Movie Suggester</h1>
<Paper elevation={3}>
<Box p={10}>
<Card>
<GenreSelect></GenreSelect>
<Button onClick={() => console.log(axios.get(`https://api.themoviedb.org/3/discover/movie?api_key=${process.env.REACT_APP_MOVIE_API_KEY}&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&with_genres=35&page=1`))}>Click me</Button>
</Card>
</Box>
</Paper>
</>
)
}
export default MovieForm
我第一次点击选择框时,它会向我显示所有选项,在控制台中记录一个错误(下面的屏幕截图),然后当我尝试点击选项时,它不会让我选择任何选项,也不会触发任何选项控制台错误,只是给我选项点击涟漪效应。
谢谢参观
您遇到的错误与 material-ui 包如何使用 ref 转发有关。该Select
组件期望其子组件接受转发的引用,而您的List
组件则不接受。
我认为您需要做的就是将映射移动到 内部Select
而不是将其定义为单独的功能组件。
return (
<>
<InputLabel htmlFor="demo-simple-select-label">Genres</InputLabel>
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
value={genreChoice}
onChange={handleGenreChange}
>
{(genres || []).map((genre: any) => {
return <MenuItem key={genre.id} value={genre.id}>{genre.name}</MenuItem>
})}
</Select>
</>
现在Select
是MenuItem
s的孩子没有包装他们。
那能解决吗?
编辑:
替换genres.map
为(genres || []).map
以避免在选择器返回时出现 TypeError null
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句