相关疑难解决方法(0)

错误的React与事件侦听器挂钩行为

我正在玩React钩子并面临一个问题.当我尝试使用事件监听器处理的按钮来控制日志时,它显示错误的状态.

CodeSandbox: https ://codesandbox.io/s/lrxw1wr97m

  1. 点击"添加卡片"按钮2次
  2. 在第一张卡中,单击Button1并在控制台中看到有2张卡处于状态(正确行为)
  3. 在第一张卡片中,单击Button2(由事件监听器处理)并在控制台中看到状态中只有1张卡片(行为错误)

为什么它显示错误的状态?在第一张卡中,Button2应在控制台中显示2张卡.有任何想法吗?

import React, { useState, useContext, useRef, useEffect } from "react";
import ReactDOM from "react-dom";
import "./styles.css";

const CardsContext = React.createContext();

const CardsProvider = props => {
  const [cards, setCards] = useState([]);

  const addCard = () => {
    const id = cards.length;
    setCards([...cards, { id: id, json: {} }]);
  };

  const handleCardClick = id => console.log(cards);
  const handleButtonClick = id => console.log(cards);

  return (
    <CardsContext.Provider
      value={{ cards, addCard, handleCardClick, handleButtonClick }}
    >
      {props.children} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hooks

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

React useState 不会在窗口事件中更新

状态确实在滚动上设置,但从事件侦听器记录,它似乎停留在初始值。

我想这与scrolling定义副作用时设置有关,但是我怎么能从滚动中触发状态更改呢?我假设的任何窗口事件也是如此。

这是一个代码和框示例:https ://codesandbox.io/s/react-test-zft3e

  const [scrolling, setScrolling] = useState(false);

  useEffect(() => {
    window.addEventListener("scroll", () => {
      console.log(scrolling);
      if (scrolling === false) setScrolling(true);
    });
  }, []);

  return (
    <>
      scrolling: {scrolling}
    </>
  );
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hooks

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

标签 统计

javascript ×2

react-hooks ×2

reactjs ×2