使用初始值而不是usestate中的上下文API

发布于 2025-01-22 14:29:29 字数 1416 浏览 0 评论 0原文

我刚刚开始与React一起使用TypeScript,并尝试与Typescript处理ContextApi。 到目前为止,我已经设置了一个上下文,并尝试在我的app.tsx中使用提供商。 我的上下文文件看起来像这样:

import { createContext, ReactNode, useState } from "react";

type props = {
 children: ReactNode
}

type GlobalContextType = {
  currentValue: number;
  setCurrentValue: (value: number) => void;
}

const INITIAL_VALUE = {
  currentValue: 1,
  setCurrentValue: () => {},
}

export const GlobalContext = createContext<GlobalContextType>(INITIAL_VALUE); 

export const GlobalProvider = ({ children }: props) => {
  const [currentValue, setCurrentValue] = useState(3);

  return(
    <GlobalContext.Provider value={{ currentValue, setCurrentValue }}>
      { children }
    </GlobalContext.Provider>
  )
}

虽然我的app.tsx文件看起来像这样:

import './App.css';
import { useContext } from 'react';
import { GlobalContext, GlobalProvider } from './ContextAPI/GlobalContext';


function App() {
  const { currentValue, setCurrentValue } = useContext(GlobalContext);
  return (
    <GlobalProvider>
      <h1>{ currentValue }</h1>
      <button onClick={() => setCurrentValue(currentValue + 1)}>Increment</button>
    </GlobalProvider>
  );

}

export default App;

很少有事情没有我预期的。 首先:当我转到我的本地主机页面时,它会显示iNITAL值,即1,而不是 我使用usestate(3)设置的一个。 第二:当我单击按钮时,它不会更新值。

我想我一直在使用初始状态价值,而不是我想在提供商内设置的状态值。

I just started using typescript with react and tried to deal with ContextAPI with the typescript.
So Far I've set a context and tried to use a provider inside my app.tsx.
My context file is looking like this:

import { createContext, ReactNode, useState } from "react";

type props = {
 children: ReactNode
}

type GlobalContextType = {
  currentValue: number;
  setCurrentValue: (value: number) => void;
}

const INITIAL_VALUE = {
  currentValue: 1,
  setCurrentValue: () => {},
}

export const GlobalContext = createContext<GlobalContextType>(INITIAL_VALUE); 

export const GlobalProvider = ({ children }: props) => {
  const [currentValue, setCurrentValue] = useState(3);

  return(
    <GlobalContext.Provider value={{ currentValue, setCurrentValue }}>
      { children }
    </GlobalContext.Provider>
  )
}

while my app.tsx file is looking like this:

import './App.css';
import { useContext } from 'react';
import { GlobalContext, GlobalProvider } from './ContextAPI/GlobalContext';


function App() {
  const { currentValue, setCurrentValue } = useContext(GlobalContext);
  return (
    <GlobalProvider>
      <h1>{ currentValue }</h1>
      <button onClick={() => setCurrentValue(currentValue + 1)}>Increment</button>
    </GlobalProvider>
  );

}

export default App;

There are few things that didn't work as I expected.
First: when I go to my localhost page it displays the inital value, which is 1, not the
one that I set using useState(3).
Second: When I click the button, it doesn't update the value.

I imagine that I'm always using the initial state value and not the one that I'm trying to set inside the provider.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉城 2025-01-29 14:29:29

尝试在上下文API中设置函数增量,然后在OnClick事件之后直接在应用程序中调用它

Try to set the function increment in the context API then call it in the app right just after onClick event

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文