[英]How to trigger the useCallback in React
I am having a React(version used 16.8) component, I have a const updateDiffText = useCallback(()
callback on click of anchor GENERATE DIFF
onclick onClick={updateDiffText}
I call call back this updateDiffText
我有一个 React(版本使用 16.8) 组件,我有一个
const updateDiffText = useCallback(()
点击锚点GENERATE DIFF
onclick onClick={updateDiffText}
回调我回调这个updateDiffText
My requirement is I don't want one anchor code in my UI, I want whenever I have oldText
and newText
It should trigger the method updateDiffText
and show the result.我的要求是我不想在我的 UI 中有一个锚代码,只要我有
oldText
和newText
就应该触发方法updateDiffText
并显示结果。 User should not click on anchor link to perform this.用户不应单击锚链接来执行此操作。
My Code sand box here - https://codesandbox.io/s/react-diff-view-demo-htp06 if I have values in oldtext and newText it should call updateDiffText this method我的代码沙箱在这里 - https://codesandbox.io/s/react-diff-view-demo-htp06如果我在 oldtext 和 newText 中有值它应该调用 updateDiffText 这个方法
My Code -我的代码 -
const DiffViewer = props => {
const oldText = useInput(props.startupConfigData);
const newText = useInput(props.runningConfigData);
const [{ type, hunks }, setDiff] = useState("");
const updateDiffText = useCallback(() => {
const diffText = formatLines(diffLines(oldText.value, newText.value), {
context: 3
});
const [diff] = parseDiff(diffText, { nearbySequences: "zip" });
setDiff(diff);
}, [oldText.value, newText.value, setDiff]);
const tokens = useMemo(() => tokenize(hunks), [hunks]);
return (
<div style={{ height: "450px", overflow: "auto" }}>
<a href="#" onClick={updateDiffText}>
GENERATE DIFF
</a>
{setDiff ? (
<Diff
viewType="split"
diffType={type}
hunks={hunks || EMPTY_HUNKS}
tokens={tokens}
>
{hunks => hunks.map(hunk => <Hunk key={hunk.content} hunk={hunk} />)}
</Diff>
) : (
""
)}
</div>
);
};
Let me know if query is not clear.如果查询不清楚,请告诉我。 Thanks.
谢谢。
const updateDiffText = useCallback(() => {
const diffText = formatLines(diffLines(oldText.value, newText.value), {
context: 3
});
const [diff] = parseDiff(diffText, { nearbySequences: "zip" });
setDiff(diff);
}, [props.startupConfigData, props.runningConfigData]);
to至
const updateDiffText = useCallback(() => {
const diffText = formatLines(diffLines(oldText.value, newText.value), {
context: 3
});
const [diff] = parseDiff(diffText, { nearbySequences: "zip" });
setDiff(diff);
}, [oldText.value, newText.value, setDiff]);
////////////// Older solution before i understood /////////////////////// ////////////// New solution i suggest /////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// ////// 我建议的新解决方案 /////////////////////////////
const updateDiffText = () => {
// do what you wanna do
}
and use useEffect instead of useCallback like this并像这样使用 useEffect 而不是 useCallback
useEffect(() => {
updateDiffText();
},[props.startupConfigData, props.runningConfigData])
Try to use the useEffect instead of useCallback.尝试使用 useEffect 而不是 useCallback。 In your case you are are not calling the memoized function in the render stage.
在您的情况下,您没有在渲染阶段调用记忆的 function。 useCallback will return a memoized function.
useCallback 将返回一个记忆的 function。 Check the modified version.
检查修改后的版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.