javascript - 如何在React中触发useCallback

标签 javascript reactjs

我有一个 React(版本使用 16.8)组件,我有一个 const updateDiffText = useCallback(() 点击 anchor 时的回调 GENERATE DIFF onclick onClick={updateDiffText} 我回调这个updateDiffText

我的要求是我不想在我的 UI 中使用 anchor 代码,我希望每当我有 oldTextnewText 时它都应该触发方法 updateDiffText 并显示结果。用户不应单击 anchor 链接来执行此操作。

我的代码沙箱在这里 - https://codesandbox.io/s/react-diff-view-demo-htp06 如果我在 oldtext 和 newText 中有值,它应该调用 updateDiffText 这个方法

我的代码 -

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>
    );
};

如果查询不清楚,请告诉我。谢谢。

最佳答案

尝试使用useEffect而不是useCallback。在您的情况下,您没有在渲染阶段调用内存函数。 useCallback 将返回一个内存函数。检查修改后的版本。

  1. https://codesandbox.io/s/react-diff-view-demo-izdyi

关于javascript - 如何在React中触发useCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58022868/

相关文章:

javascript - HTML 选择标签并在下拉框中更改值

javascript - 在 GatsbyJs 中使用 React 汉堡菜单

javascript - React hook useEffect() 底层。使用 useEffect 安排的效果是否会阻塞主线程?

javascript - 我对 API 的调用并未更新 React 状态

javascript - 无法将点击事件绑定(bind)到回显元素

javascript - 如何使用javascript删除子div

javascript - 如何获取该对象作为结果

javascript - 单击即可在数据集之间进行简单转换

javascript - 如何从 react-bootstrap 复选框获取值/属性?

javascript - 使用 browserhistory 更改 url 的 react 路线但没有任何反应