У меня есть элемент пользовательского интерфейса выбора материала:
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
value={sortType}
onChange={handleChange}
>
<MenuItem value={'release_date'}>Release date</MenuItem>
<MenuItem value={'title'}>Title</MenuItem>
{/* <MenuItem value={'Date added'}>Date added</MenuItem> */}
</Select>
Как видите, значение представляет собой строку release_date
или title
. Я хочу отсортировать массив в зависимости от того, какой вариант был выбран:
type IMovie = {
title: string;
poster_path: string;
release_date: string;
id: number;
type?: any;
};
const handleChange = event => {
setSortType(event.target.value);
const type = event.target.value;
localforage.getItem<IMovie []>('trackedMovies').then((value) => {
let trackedMovies = value;
trackedMovies = orderBy(trackedMovies, [movie => movie.type], ['asc']);
})
};
Это не работает, я думаю, это потому, что trackedMovies = orderBy(trackedMovies, [movie => movie.type], ['asc']);
имеет тип any
.
Если я заменю тип свойством IMovie
, например title
или release_date
, sortBy
будет работать:
trackedMovies = orderBy(trackedMovies, [movie => movie.type], ['asc']);
Если я изменю значение в MenuItem
: <MenuItem value={release_date}>Release date</MenuItem>
I получить сообщение об ошибке:
Невозможно найти имя 'release_date'.
Это имеет смысл, потому что нет ссылки на {release_date}
. Я мог бы решить эту проблему с помощью переключателя, но было бы намного проще / лучше (я думаю) использовать прямое значение MenuItem
, чтобы решить, что должен делать метод sortBy
.