typescript - 搜索过滤器在自定义对象的本机打字稿中完成后无法分配数据
问题描述
我有一个自定义对象,一个数组并在其中存储 api 响应,并将该数据显示到 UI 中以供平面列表使用。
export type userInfo = {
id: string,
title: string,
email: string,
userAccount: number
};
export type userData = {
page: number,
pageSize: number,
userInformation: userInfo[]
}
export const User: FunctionComponent = () => {
const [search, setSearch] = useState('');
const [userInfo, setUserInfo] = useState<userInfo>();
const [arrayholder, setArrayholder] =useState<userInfo>();
useEffect(() => {
setUserInfo(someState.userInfo);
setArrayholder(someState.userInfo);
}, [someState]);
searchData= (text: any)=> {
const newData = arrayholder?.userData.filter(item => {
const itemData = item.title.toUpperCase();
const textData = text.toUpperCase();
return itemData.indexOf(textData) > -1
});
console.log("newData is", newData) //here throwing error
setUserInfo(newData)
setSearch(text)
}
}
return (
//here showing searchbar
//here showing flatlist showing with userInfo
)
尝试为 userInfo 设置新数据时,它显示以下错误并且无法在平面列表中显示搜索数据。
Type 'userInfo[]' provides no match for the signature '(prevState: userInfo | undefined): userData | undefined'.ts(2345)
有什么建议么?
我是打字稿语言的新手。
解决方案
filter
返回一个数组:
arrayholder?.activities.filter
这就是为什么 userInfo 需要一个数组类型参数。
const [userInfo, setUserInfo] = useState<userInfo[]>();
推荐阅读
- javascript - 从 DB 获取返回 [object Object] 而不是 Vue JS 中的值
- java - 如何在 JAVA 中使用二维数组从用户那里获取多个输入?
- ios - **[Assert] UIKit 客户端错误:-[UIWindow setScreen:] 如果客户端采用 UIScene 生命周期,则不应调用
- javascript - 在自动完成中未找到结果时显示消息
- ios - dyld:库未加载:@rpath/MapboxMobileEvents.framework/MapboxMobileEvents
- linux - Liberty Profile - 在 Linux 中出现错误 [无法启动新的 UOW。LocalTransactionContainment 已经在工作中处于活动状态]
- java - Spring Boot - 发送短信的调度程序
- java - 管理字符串的有效方法
- mysql - Redmine 中的间歇性 500 内部服务器错误
- ms-access - 'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机 Office 365 上注册