【发布时间】:2020-09-11 19:57:47
【问题描述】:
我正在尝试将文本输入中的值存储到 redux 存储中,但问题是我的 react 组件仍在重新渲染。
使用 debounce 动作调度动作后,组件自动完成重新呈现,我得到初始状态。所以输入在 300 毫秒后因为去抖动功能变为空。
我尝试使用 useCallback 来避免它,但没有任何结果。
如何将输入值保存到 redux 存储中并防止重新渲染反应组件?
const AutoComplete = () => {
const [focus, setFocus] = useState(false);
const [blur, setBlur] = useState(false);
const radarTrends = useSelector(selectedRadarsTrends);
const dispatch = useDispatch();
const filteredValue = useSelector(selectedFilteredValue);
const debounceFilteredValue = (value) => {
dispatch(setFilteredValue(value));
}
const debounce = useCallback(_.debounce(debounceFilteredValue, 300), []);
const handleOnChange = (event) => {
debounce(event.target.value);
};
const handleOnFocus = () => {
setBlur(false);
setFocus(true);
};
const handleOnBlur = () => {
setFocus(false);
setBlur(true);
};
return (
<StyledAutoComplete hasFocus={focus} hasBlur={blur}>
<StyledMagnifier>
<Magnifier width={20} height={20} />
</StyledMagnifier>
<Input
placeholder="type trend name"
type="text"
label=""
name="autocomplete"
onFocus={handleOnFocus}
onChange={handleOnChange}
onBlur={handleOnBlur}
/>
</StyledAutoComplete>
);
};
感谢您的帮助。
【问题讨论】:
标签: reactjs redux react-redux redux-toolkit