我正在做一个项目与ReactyReact-Redux
我正在使用一个api,创建一个Search组件来从这个api中获取数据,但是我不知道如何将redux这个词(从搜索的内容中)传递给这个组件。如果我想查找单词“pasta”,我不知道我应该如何传递它。我正在学习如何使用Redux
- ----还原----
const INITIAL_STATE = {
search: '',
};
const reducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case SEARCH: return {
...state,
recipes: action.payload,
};
default:
return {...state}
}
};
export function getByName(query) {
return function (dispatch) {
return axios.get("https://www.themealdb.com/api/json/v1/1/search.php?s="+query).then((response) => {
dispatch({
type: SEARCH,
payload: response.data.meals
})
}).catch((error) => console.log(error));
}
}
---- COMPONENTE SEARCH ---
const [search, setSearch ] = useState('')
const query = useSelector((state) => state.recipeReducer.search);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getByName(query))
}, [dispatch])
const handleFilter = e => {
e.preventDefault();
setSearch(e.target.value)
dispatch(getByName(search))
}
return (
<div>
<form>
<label>
Search:
<input type="text" id="title" placeholder='Search recipe...' value={search} onChange={(e) => handleFilter(e)} />
</label>
</form>
</div>
)
}
1条答案
按热度按时间mtb9vblg1#
我注意到的一件事是,你初始状态中的“搜索”是多余的,结果才是你对这个玩具问题关心的东西,你应该有:
接下来的问题是搜索组件的构造。这个组件定义了你的查询,而不是阅读它。类似这样的东西更像你想要的: