首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的状态在Nextjs中没有改变?

为什么我的状态在Nextjs中没有改变?
EN

Stack Overflow用户
提问于 2022-04-20 04:11:22
回答 2查看 380关注 0票数 2

我试图在nextjs应用程序中使用easy来进行全局状态管理,并且遇到了一些问题,在这些问题中,状态只在更改页面时才会更新。我想我可能不太明白我在做什么,所以我决定尝试一个快速启动指南的应用程序:https://easy-peasy.vercel.app/docs/tutorials/quick-start.html

当我单击按钮时,设置所有这些都不会发生任何事情。如果我在代码中做了一个更改并保存它,那么当它重新加载时,所有的更改都会发生。

有谁知道这是为什么,我是怎么解决的吗?我想可能是nextjs,但我只是用react进行了测试,这也不起作用。我一定是对这件事应该如何运作缺乏一些了解。在一篇教程中,我遵循了它的工作原理,而克隆也很有效。我不知道当我尝试用相同的代码创建自己的项目时,这就是为什么它没有立即更新的原因。

编辑:我不知道为什么我不只是分享回购。这里是:https://github.com/Kyle-Kroger/easy-peasy-broken

编辑2:我试着让Traversy的简易教程为v5更新内容,这也是一样的。单击时没有任何更新,但是如果我编辑代码,它将在重新加载时更新状态。我明天早上要在另一台电脑上试用。https://github.com/Kyle-Kroger/traversy-media-easy-peasy-broken

编辑3:我想我可能已经搞清楚了。我想知道这是否与react 18版本有关。这是我克隆的回购和我的唯一不同之处。我们将看到如何在旧版本中使用,并看看这是否有效。

编辑4:嗯,经过许多小时后,我解决了这个问题。在反应版本18打破了一些如何容易-农民的工作。回到17岁,一切都会好起来的。

这是我所有的代码:

代码语言:javascript
复制
//store.js
import { createStore, action } from "easy-peasy";

export const store = createStore({
  todos: [],
  addTodo: action((state, payload) => {
    state.todos.push({ text: payload, done: false });
  }),
});
代码语言:javascript
复制
//body.js
import { useStoreState } from "easy-peasy";

const Body = () => {
  const todos = useStoreState((state) => state.todos);
  return (
    <>
      <p onClick={() => console.log(todos)}>Some more text to click</p>
      <ul>
        {todos.map((todo) => (
          <li key={todo.text}>{todo.text}</li>
        ))}
      </ul>
    </>
  );
};

export default Body;
代码语言:javascript
复制
//title.js
import { useStoreActions } from "easy-peasy";
import { useState } from "react";

const Title = () => {
  const addTodo = useStoreActions((actions) => actions.addTodo);
  const [value, setValue] = useState("");

  return (
    <>
      <input onChange={(e) => setValue(e.target.value)} value={value} />
      <button onClick={() => addTodo(value)}>Add Todo</button>
    </>
  );
};

export default Title;
代码语言:javascript
复制
_app.js
import "../styles/globals.css";
import { StoreProvider } from "easy-peasy";
import { store } from "../lib/store";

function MyApp({ Component, pageProps }) {
  return (
    <StoreProvider store={store}>
      <Component {...pageProps} />
    </StoreProvider>
  );
}

export default MyApp;
代码语言:javascript
复制
//index.js
import Body from "../components/body";
import Title from "../components/title";

export default function Home() {
  return (
    <div>
      <Title></Title>
      <Body></Body>
    </div>
  );
}
EN

回答 2

Stack Overflow用户

发布于 2022-07-08 20:30:34

移除

代码语言:javascript
复制
   <React.StrictMode></React.StrictMode>

在React 18上修复这个问题,不是一个真正的解决方案,而是一个解决办法,直到有人修复它。

票数 1
EN

Stack Overflow用户

发布于 2022-05-20 13:48:40

我在更新的时候也遇到了麻烦。有趣的是,我将StoreProviderindex.js更改为app.js,它起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71934003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档