我有一个自定义的反应钩子:
function useItem(id) {
const [value, setValue] = useState();
useEffect(() => {
databaseRead(id).then(i => setValue(i));
}, [id]);
function setItem(i) {
setValue(i);
}
function writeItem(i) {
databaseWrite(id, i);
}
return [value, setItem, writeItem];
}
Run Code Online (Sandbox Code Playgroud)
在组件中使用这样的钩子时,每次值更改时返回的 writeItem 函数都会更改(大概是因为我每次都创建一个新数组)。
当我在像这样的 Item 中使用钩子时,如何避免重新呈现 Button 组件?
function Item(props) {
const [item, setItem, writeItem] = useItem(props.id);
return(
<>
<ItemEditor data={item} setItem={setItem}/>
<Button onPress={writeItem}/>
</>
)
}
Run Code Online (Sandbox Code Playgroud)
我目前的工作但笨拙的方法是从我的钩子中返回一个 useRef 对象而不是数组:
function useItem(id) {
const retVal = useRef({
value: value,
setItem: setItem,
writeItem: writeItem
}).current;
const [dirty, setDirty] …Run Code Online (Sandbox Code Playgroud)