【发布时间】:2021-02-03 13:55:55
【问题描述】:
我正在尝试制作自己的去抖输入元素,我可以在其中发送我需要的任何输入组件,例如 textarea 和 input 并使其去抖。我制作了一个如下所示的 debounceComponent:
import { useState, useCallback } from "react";
import debounce from "lodash.debounce";
const useDebounce = (callback, delay) => {
const debouncedFn = useCallback(
debounce((...args) => callback(...args), delay),
[delay] // will recreate if delay changes
);
return debouncedFn;
};
function DebouncedInput(props) {
const [value, setValue] = useState(props.initialValue);
const debouncedSave = useDebounce(
(nextValue) => props.onChange(nextValue),
1000
);
const handleChange = (event) => {
const { value: nextValue } = event.target;
setValue(nextValue);
debouncedSave(nextValue);
};
return props.renderProps({ ...props, handleChange, value });
//return <textarea value={value} onChange={handleChange} rows={5} cols={50} />;
}
export default DebouncedInput;
这就是我使用它的方式:
<DebouncedInput
initialValue={value}
onChange={handleChange}
rows={5}
cols={50}
renderProps={(props) => <TextArea {...props} />}
/>
但是,如果我这样使用它,我会得到一个错误:
对象作为 React 子对象无效(找到:带键的对象 {dispatchConfig,_targetInst,_dispatchListeners,_dispatchInstances, nativeEvent, 类型, 目标, currentTarget, eventPhase, 气泡, 可取消、时间戳、defaultPrevented、isTrusted、 isDefaultPrevented,isPropagationStopped})。如果你打算渲染一个 孩子的集合,请改用数组。
您可以看到它的代码框here。 我在这里做错了什么,我该如何解决这个问题?
【问题讨论】:
-
这是因为在
App中的handleChange中,您将值设置为事件对象。函数的参数,其实就是一个事件,所以可以通过event.target.value获取值
标签: reactjs