小编Ram*_*ddy的帖子

在 React 中,如何在所有组件中拥有自定义钩子的单个实例?

我有几个组件需要访问相同的玩家列表。这个玩家列表不会改变,但我不知道哪个组件首先需要它。我的想法是,无论哪个组件首先需要它(axios 请求)更新我的 redux 存储,然后其他组件将仅使用相同的自定义挂钩。

export default function usePlayersList() {
  const {list, loading, error} = useSelector(state => state.accounts.players)
  const dispatch = useDispatch()
  
  useEffect(() => {
    try {
      const response = authAxios.get(endpoints.players.retrieve)
      response.then(res => {
          dispatch({
            type: "SET_PLAYERS_LIST",
            payload: {
              error: false,
              loading: false,
              list: res.data.payload
            }
          })
        })
    } catch (e) {
      console.log(e)
      dispatch({
        type: "SET_PLAYERS_LIST", 
        payload: {
          error: true,
          loading: false,
          list: []
        }
      })
    }
  }, [dispatch])
  return {list, loading, error}
}
Run Code Online (Sandbox Code Playgroud)

这是我为此定制的钩子。想知道这样做是否有任何不便,或者是否有更好的模式。提前致谢。

顺便说一句...更好的是,我将加载和错误设置为 usePlayersList 中的 useState 变量(而不是将它们发送到 redux …

reactjs react-redux react-context react-hooks

8
推荐指数
1
解决办法
8059
查看次数

如何列出在不同端口上运行的所有进程/服务

是否有一个命令可以列出在本地主机的不同端口上运行的所有服务?

就我而言,当我开发 Angular 应用程序时,我可能会在 localhost:4200 上运行它,在 localhost:3000 上运行 React 应用程序,在 localhost:6379 上运行 Redis 服务器,等等。

有没有办法知道它们是否正在运行以及如何杀死/停止它们?

port localhost

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

React 钩子真的必须从“使用”开始吗?

让我们创建一个非常简单的钩子useDouble,它返回一个数字的双精度:

export default function useDouble(nb) {
  return nb * 2;
}
Run Code Online (Sandbox Code Playgroud)

文档(https://reactjs.org/docs/hooks-custom.html#extracting-a-custom-hook)内容如下:

自定义 Hook 是一个 JavaScript 函数,其名称以“use”开头,并且可以调用其他 Hook

但如果我useDouble改为double,它仍然有效。我什至尝试从double钩子中调用其他钩子,它仍然有效。

演示:https : //codesandbox.io/s/laughing-gareth-usb8g?file=/ src/ components/WithUseDouble.js

所以我的问题是:命名钩子useXxxxx只是一种约定,还是真的能以某种方式打破某些东西?如果可以,你能举个例子吗?

谢谢

javascript reactjs react-hooks

6
推荐指数
2
解决办法
567
查看次数

React.useCallback 是否会记住柯里化函数?

有时我会在 内部声明柯里化函数时使用这种模式useCallback

const Child = ({ handleClick }) => {
  return (
    <>
      <button onClick={handleClick("foo")}>foo</button>
      <button onClick={handleClick("lorem")}>lorem</button>
    </>
  );
};

export default function App() {
  const [state, setState] = useState("");

  const handleClick = useCallback(
    (newState) => () => {
      setState(newState);
    },
    []
  );

  return (
    <div className="App">
      <Child handleClick={handleClick} />
      <p>{state}</p>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

编辑 serene-platform-kuzc2

因为我想将参数从 JSX 传递到事件处理程序并避免多个处理程序。

当组件重新渲染时,handleClick将被调用,返回的函数将被分配给 prop onClick,但它每次都是一个新函数还是嵌套函数也会被 记忆useCallback

PS:这是一个简单的例子。假设useCallback具有多个依赖项的用法

javascript memoization reactjs

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

关于 Javascript 提升的困惑

我以为我掌握了提升的概念,但下面的代码让我感到困惑。怎么返回1呢?第二个 example() 函数会被提升到第一个函数之上吗?

function example() {
  return 9;
}

console.log(example());

function example() {
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

如果在编译阶段提升函数声明并在执行阶段执行函数表达式。下面的代码为什么返回7?这仅仅是因为首先声明了示例表达式吗?

var example = function() {
  return 7;
}

console.log(example());

function example() {
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

先感谢您!

javascript hoisting executioncontext

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

使用扩展语法时如何根据索引更新数组元素?

将数组视为

const foo = [1, 2, 3];

现在,如果我想替换第二个元素,我可以这样做:

foo[1] = 4;或者

foo.splice(1,1,4);或者

const foo = [1, 2, 3];

console.log([...foo.slice(0, 1), 4, ...foo.slice(2)]);
// I know this creates a new array unlike the above two ways.
Run Code Online (Sandbox Code Playgroud)

但是当我们使用扩展运算符来浅复制对象时,我们可以动态地覆盖一个属性,例如:

const someObject = {
 a: 1,
 b: 2,
 c: 3
}
const propertyToChange = 'b';

const newObject = { ...someObject, [propertyToChange]: 4 };
Run Code Online (Sandbox Code Playgroud)

那么,数组有等价的吗?也许类似于下面的内容来根据索引更改元素。

const newArray = [...oldArray, [dynamicIndex]: 4 ];
Run Code Online (Sandbox Code Playgroud)

javascript arrays ecmascript-next

3
推荐指数
1
解决办法
3569
查看次数

为什么这个 javascript 代码段记录为 1?

在一次采访中,我被要求猜测以下代码片段的输出:

var foo = 1;
    
function bar() {
    foo = 10;
    return;
    function foo() {
    }
}

bar();

console.log(foo);
Run Code Online (Sandbox Code Playgroud)

我认为输出将是 10,因为 bar 函数在重新分配 foo 的值后立即返回,但实际输出为 1。是否因为函数定义具有相同的变量名(foo)?是否为foo里面的变量创建了一个新的作用域bar

javascript

3
推荐指数
1
解决办法
89
查看次数

为什么两次调用 setState 会导致一次状态更新?

这可能是初学者的 React 错误,但我想使用“add2Messages”调用“addMessage”两次,但它只注册一次。我猜这与 React 中的 hooks 工作方式有关,我该如何使其工作?

export default function MyFunction() {
  const [messages, setMessages] = React.useState([]);

  const addMessage = (message) => {
    setMessages(messages.concat(message));
  };

  const add2Messages = () => {
    addMessage("Message1");
    addMessage("Message2");
  };

  return (
    <div>
      {messages.map((message, index) => (
        <div key={index}>{message}</div>
      ))}
      <button onClick={() => add2Messages()}>Add 2 messages</button>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

我正在使用反应 17.0.2

javascript reactjs

3
推荐指数
1
解决办法
1223
查看次数

我想显示来自 React 的数组列表,但当我认为我做的一切都正确时它没有显示?

我想显示来自 React 的数组列表,但当我认为我做的一切都正确时它没有显示?请问我哪里错了

下面是代码

import { useState } from 'react';

function App() {
   
  const [items , setItems] = useState([{
       id:1,
       text:'simple 1'
  },
  {
    id:1,
       text:'simple 2'
  },
  {
    id:1,
    text:'simple 3'
  },

])

  return (
    <div className="App">
    
    {items.map((item) => (
      <h1>{items.text}</h1>
    ))}


     <h1>Hello from React js</h1>
    </div>
  );
}

export default App;
Run Code Online (Sandbox Code Playgroud)

arrays arraylist reactjs react-hooks

0
推荐指数
1
解决办法
1074
查看次数

如何使用JavaScript在单击后添加一个类,然后在再次单击后将其删除?

前不久刚学javascript,正在练习点击后如何添加颜色,再次点击时可以取消颜色!

\n

但即使我上网查了一下,我还是不知道\xe2\x80\x99哪个语法是错误的?

\n

希望得到您的指导,谢谢~

\n

\r\n
\r\n
let add = document.querySelector(\'.add\');\nlet box = document.querySelector(\'.box\');\n\n\nadd.addEventListener(\'click\',function(e){\n  e.preventDefault();\n  box.setAttribute(\'class\',\'blue\');\n})
Run Code Online (Sandbox Code Playgroud)\r\n
.add {\n  display: block;\n  margin-bottom: 100px;\n}\n\n.box {\n  width: 100px;\n  height: 100px;\n  border: 1px solid;\n}\n\n.blue {\n  background-color: blue;\n}
Run Code Online (Sandbox Code Playgroud)\r\n
<a class="add" href="javascript:;">click</a>\n\n<div class="box"></div>
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

javascript

0
推荐指数
1
解决办法
55
查看次数