sev*_*ven 7 javascript typescript reactjs redux
我正在尝试向我的 React 应用程序添加去抖动功能,并且想要在没有像 loadash、3rd 方节点模块等库的情况下进行。我尝试在那里发布一些帖子,但没有任何效果。
基本上,handleSearch我只是分派 redux 操作,该操作执行对 API 端点的查询,并在输入绑定值中将值绑定到 redux 状态并调用 handleSearch onChange。
我的代码是:
const handleSearch = (e: React.FormEvent<HTMLInputElement>) => {
const value = e.currentTarget.value
dispatch(setSearch(value))
}
Run Code Online (Sandbox Code Playgroud)
后来作为回报
<input type="text" value={searchQuery} onChange={handleSearch} />
Run Code Online (Sandbox Code Playgroud)
另外,我的操作:
export const searchMovies = (category: String, searchQuery: string) => async (dispatch: Dispatch<ControlDispatchTypes>) => {
try {
dispatch({
type: SEARCH_LIST_LOADING
})
let res: any;
if (searchQuery.length >= 3) {
res = await axios.get(`https://api.themoviedb.org/3/search/${category}?api_key=xxxxxxxxxx&query=${searchQuery}`)
}
dispatch({
type: SEARCH_LIST_SUCCESS,
payload: res.data.results
})
} catch (error) {
dispatch({
type: SEARCH_LIST_FAIL
})
}
}
Run Code Online (Sandbox Code Playgroud)
和一块用于搜索的减速器:
...
case SET_SEARCH:
return {
...state,
search: action.payload
}
case SEARCH_LIST_LOADING:
return {
...state,
searchLoading: false
}
case SEARCH_LIST_SUCCESS:
return {
...state,
searchLoading: false,
items: action.payload
}
case SEARCH_LIST_FAIL:
return {
...state,
searchLoading: false
}
...
Run Code Online (Sandbox Code Playgroud)
小智 1
我见过 React Redux 项目使用此资源向其项目添加去抖功能。它取自https://davidwalsh.name/javascript-debounce-function
export const debounce = (func, wait, immediate) => {
let timeout;
return function () {
const later = () => {
timeout = null;
if (!immediate) func.apply(this, arguments);
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(this, arguments);
};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1176 次 |
| 最近记录: |