小编Uri*_*evi的帖子

如何将 stopPropagation() 与 Next.js 一起使用?

我正在尝试使用 stopPropagation,以便在单击任何其他元素后我的下拉菜单将关闭。

当我尝试使用 stopPropagation 并更新布尔状态时,按钮重新渲染页面(将状态重置回“false”),而不是将状态更新为 true,并且无论如何它都会停留在“true”上。

我写了一个例子的代码:

import { useEffect, useState } from "react";

export default function IndexPage() {
  const [state, setState] = useState(false);

  useEffect(() => {
    document.body.addEventListener("click", () => {
      setState(false);
    });
  });

  const onButtonClick = (e) => {
    e.stopPropagation();
    setState(!state);
  };

  console.log(state);

  return (
    <div>
      <button onClick={onButtonClick}>Click</button>

      <h1>{state ? "true" : "false"}</h1>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

这个问题似乎出现在 Next.js 中

我用React应用程序编写了相同的代码,没有问题。

Next.js 代码和盒子链接

React 代码和盒子链接

编辑:

当您分叉 Next.js 沙箱项目时,一切都工作正常。(但它并不能解决我的原始代码的问题)。

任何人都知道为什么会发生这种情况?

javascript reactjs next.js

6
推荐指数
1
解决办法
3337
查看次数

Firebase 9 与 React Typescript:如何更改 querySnapshot 类型?

当我尝试从 firestore 保存查询快照时,它返回为q: Query<DocumentData>,而我的查询快照为querySnap: QuerySnapshot<DocumentData>

DocumentData 类型是: [field: string]: any;我无法循环遍历它而不出现任何错误。

我的效果代码

useEffect(() => {
    const fetchListings = async () => {
      try {
        // Get reference
        const listingsRef = collection(db, "listings");

        // Create a query
        const q = query(
          listingsRef,
          where("type", "==", params.categoryName),
          orderBy("timestamp", "desc"),
          limit(10)
        );

        // Execute query
        const querySnap = await getDocs(q);

        let listings: DocumentData | [] = [];

        querySnap.forEach((doc) => {
          return listings.push({ id: doc.id, data: doc.data() });
        });

        setState((prevState) => …
Run Code Online (Sandbox Code Playgroud)

types firebase typescript reactjs

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

标签 统计

reactjs ×2

firebase ×1

javascript ×1

next.js ×1

types ×1

typescript ×1