首先,我想说我从来没有使用过Next.js或context api,所以请耐心听我说。
我目前正在Next.js中开发一个web应用程序,其中有多个页面,每个页面都包含一个表单。我希望有某种全局状态,以便能够设置和更新每个表单的数据。所有表单数据一起
例如:第1页=名称,第2页=说明,...
从我在网上读到的内容来看,我认为使用上下文api就足够了,但我遇到了困难。当我在第一个表单上填写名字时,它不会保存在全局状态,因为它不会显示在第二页上。
我不明白我哪里出了错,所以我非常欢迎任何帮助!
附注。如果我没有解释正确的部分或忘记添加一些代码段,请告诉我。
BusinessContext.tsx
import { createContext, useState } from "react";
//accessible data
export interface BusinessContextData {
businessName: string;
handleBusinessName: (name: string) => void;
}
//default values
export const businessContextDefaultValue: BusinessContextData = {
businessName: "",
};
//provider
export const BusinessContext = createContext<BusinessContextData>(
businessContextDefaultValue
);
//hooks that components can use to change the values
export function useBusinessContextValue(): BusinessContextData {
const [businessName, setBName] = useState<string>("");
const handleBusinessName = (name: string) => {
setBName(name);
};
return {
businessName,
handleBusinessName,
};
}
app.tsx(_A)
import type { AppProps } from "next/app";
import {
useBusinessContextValue,
BusinessContext,
} from "../context/businessContext";
import "../styles/global.css";
function MyApp({ Component, pageProps }: AppProps) {
const businessContextValue = useBusinessContextValue();
return (
<BusinessContext.Provider value={businessContextValue}>
<Component {...pageProps} />
</BusinessContext.Provider>
);
}
export default MyApp;
businessName.tsx-名称表单页(应将给定的名称保存在全局状态)
import { ChangeEvent, FormEvent, useContext, useState } from "react";
import { BusinessContext } from "../context/businessContext";
const IndexPage = () => {
const { handleBusinessName } = useContext(BusinessContext);
const router = useRouter();
const [businessNameState, setBusinessnameState] = useState<string>("");
const onSubmit = (e: FormEvent) => {
handleBusinessName(businessNameState);
router.push("/businessVision");
};
return (
...
<form onSubmit={(e: FormEvent) => onSubmit(e)}>
<div className="formInputRow">
<input
className="formInput"
type="text"
placeholder="Business name"
required
value={businessNameState}
onChange={(val: ChangeEvent<HTMLInputElement>) =>
setBusinessnameState(val.target.value)
}
/>
</div>
<button type="submit">
Next
</button>
</form>
...
);
};
export default IndexPage;
businessVision.tsx-应显示全局状态中的业务名称
import { ChangeEvent, FormEvent, useContext, useEffect, useState } from "react";
import { BusinessContext } from "../context/businessContext";
const BusinessVisionpage = () => {
const { businessName } = useContext(BusinessContext);
const router = useRouter();
const [businessVisionState, setBusinessVisionState] = useState<string>("");
return (
...
<h1>
<span>{businessName}</span>
</h1>
...
);
};
您的上下文设置正确,但您需要防止
问题内容: 我正在尝试在我的应用程序上使用React 16.3中的新上下文API进行一些测试,但我不明白为什么我的重定向永远无法工作。 我不想让我的ContextB可用于所有路由,仅2和3。我该怎么做? 问题答案: 看起来应该只具有和`<Redirect `组件作为直接子代。(来源) 我想这就是为什么你的,你使用不工作的孩子。 最简单但重复的解决方案可能是让您成为每个想要的孩子的孩子: 注意:这些
我试图在我的应用程序上用React 16.3的新上下文API做一些测试,但是我不明白为什么我的重定向从来没有工作过。 我不想让我的ContextB适用于所有路线,只适用于2号和3号路线。我该怎么做?
问题内容: 我有一个验证并保存表单的视图。保存表单后,我想重定向回list_object视图,并显示一条成功消息“客户xyz的表单已成功更新…” HttpResponseRedirect似乎无法正常工作,因为它只为url提供一个参数,无法与之一起传递字典。 我已经尝试修改object_list的包装,以将dict作为具有必要上下文的参数。我从保存表单的视图内部返回对此包装的调用。但是,呈现页面时,
问题内容: 我一直在使用mgo作为我的API,但我在MongoDB中看到了许多当前连接(同时使用少于5个设备进行测试)。通过在Mongo服务器上执行,我得到:。在下面,我将我的问题记录在mgo的Github中(问题#429): 我在Web服务器中使用mgo的方式是否正确?如果没有,您能举一个完整的例子吗? 此代码不起作用,将其视为几乎伪代码(由于缺少诸如导入的部分或配置来自何处和模型),但这正是我
我想在我的应用程序中使用上下文操作条(CAB),但它与旧版本的Android不兼容,所以我使用这个教程:http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps我的代码是: 我在以下方面有错误: null 知道吗?驾驶室使用神探夏洛克还有其他解决方案吗?
伙伴。我有一个菜单组件在我的next.jsWeb应用程序。菜单的数据是通过GraphQL动态生成的。我想要菜单组件的服务器端渲染。我尝试使用getStatic Props()在服务器上呈现数据。但是getStatic Props()不能在组件上工作,它只能在页面上工作。 现在,我该如何解决这个问题呢?我不想在每一页的菜单上重复相同的代码,我想重复使用代码或类似的东西。请帮我解决这个问题。提前感谢。