小编fur*_*ceX的帖子

React 自定义钩子和 useMemo 钩子

我有两个“昂贵”的函数,我想在我的反应应用程序中记住它们,因为它们需要很长时间才能渲染。昂贵的函数用在数组映射中。我想记住数组映射的每个结果,这样如果数组的一个元素发生更改,只有该元素的昂贵函数将被重新计算。(并且要独立地记住昂贵的函数,因为有时只需要重新计算一个函数。)我正在努力解决如何记住并传递当前数组值的问题。

这是工作演示,没有记忆:

import React, { useMemo, useState } from "react";

const input = ["apple", "banana", "cherry", "durian", "elderberry", "apple"];

export default function App() {
  const output = input.map((msg, key) => createItem(msg, key));
  return <div className="App">{output}</div>;
}

const createItem = (message, key) => {   // expensive function 1
  console.log("in createItem:", key, message);

  return (
    <div key={key}>
      <strong>{"Message " + (1 + key)}: </strong>
      {message} =>{" "}
      <span
        id={"preview-" + key}
        dangerouslySetInnerHTML={{ __html: msgSub(message) }}
      />
    </div>
  );
};

const msgSub = …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks react-usememo

5
推荐指数
1
解决办法
2万
查看次数

React Hook useCallback 不更新状态值

我是 React Hooks 的新手。我有一个带有多个输入的 UI,其中包含一个对象中的值。我用循环创建 UI,所以我想有一个单一的回调来更新输入。

在此处输入图片说明

“商店”输入使用它自己的回调并成功更新状态。但是“产品”输入永远不会更新状态。我真的不明白为什么这两个回调的行为不同。

代码如下。问题出在handleChange回调中。

import React, { useCallback, useState, useEffect } from "react";
import { TextField, Form } from "@shopify/polaris";

export default function TextFieldExample() {
  const [values, setValues] = useState({
    "prod-0": "Jaded Pixel",
    "prod-1": "blue diamonds"
  });
  const [shop, setShop] = useState("Joe's house of pancakes");

  const handleChangeShop = useCallback(newName => {
    setShop(newName);
  }, []);

  const handleChange = useCallback((newValue, id) => {
      console.log("Pre: values:", values);
      console.log(id, newValue);
      const newProds = values;
      newProds[id] = newValue;
      setValues(newProds); …
Run Code Online (Sandbox Code Playgroud)

shopify reactjs react-hooks

4
推荐指数
2
解决办法
1万
查看次数

标签 统计

react-hooks ×2

reactjs ×2

react-usememo ×1

shopify ×1