【发布时间】:2020-08-01 18:35:11
【问题描述】:
我有一个材质选择 UI 元素:
<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 之类的IMovie 属性替换类型,sortBy 确实有效:
trackedMovies = orderBy(trackedMovies, [movie => movie.type], ['asc']);
如果我更改 MenuItem: <MenuItem value={release_date}>Release date</MenuItem> 中的值,我会收到以下错误:
找不到名称“release_date”。
这是有道理的,因为没有提到 {release_date}。我可以通过使用开关来解决这个问题,但使用MenuItem 的直接值来决定sortBy 方法应该做什么会更容易/更好(我认为)。
【问题讨论】:
标签: typescript lodash