我在我的应用程序中创建了一个上下文搜索,其中有一个名为“searchPosts”的数组。我的目标是在上下文中将一个对象从一个组件发送到这个数组中,从而能够在其他组件中使用它。我希望创建一个存储对象的全局状态
上下文
import { createContext } from "react";
export type SearchContextType = {
searchPost: (text: string) => void;
};
export const SearchContext = createContext<SearchContextType>(null!);
提供者
import React, { useState } from "react";
import { SearchContext } from "./SearchContext"
export const SearchProvider = ({ children }: { children: JSX.Element }) => {
const [searchPosts, setSearchPosts] = useState([]);
const searchPost = (text: string) => {
}
return (
<SearchContext.Provider value={{searchPost}}>
{ children }
</SearchContext.Provider>
);
}
我创建了这个搜索函数,因为理论上它应该是一个函数,我可以将项目添加到数组中,但我不知道如何才能做到这一点。
这是我在名为“searchPosts”的组件中的状态,我获取了要传递给全局数组的对象。我希望将信息从该组件中的数组传递给上下文中的全局数组
const navigate = useNavigate();
const api = useApi();
const [searchText, setSearchText] = useState('');
const [searchPost, setSearchPost] = useState([]);
const handleSearch = async () => {
const posts = await api.getAllPosts();
const mapPosts = posts.filter(post => post.title.toLowerCase().includes(searchText));
setSearchPost(mapPosts);
}
2条答案
按热度按时间0pizxfdo1#
在组件
searchPosts
中,尝试使用useContext
钩子从上下文组件导入SearchContext
和searchPost
函数。现在,在
handleSearch
函数中,将mapPosts
数组传递给从useContext
钩子导入的searchPost
函数,如下所示:现在,在
provider
组件中的searchPost
函数内添加以下代码:r8uurelv2#
将
searchPost[]
添加到SearchContextType
创建缩减器以管理调度
创建提供程序
现在创建一个定制钩子来访问上下文
在您的组件中,可以使用上述方法访问状态。