提交 d41de93e 作者: 翁进城

增加通用provider实现发布后刷新

上级 c77dd3e9
import { Button, Form, Input, Modal, Select } from "antd"; import { Button, Form, Input, Modal, Select } from "antd";
import { useEffect, useState } from "react"; import { useContext, useEffect, useState } from "react";
import { CommonContext } from "~/lib/commonProvider";
import { useGeolocation } from "~/lib/hooks"; import { useGeolocation } from "~/lib/hooks";
import api, { PublishParams, TypeResp } from "./api"; import api, { PublishParams, TypeResp } from "./api";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
...@@ -19,6 +20,8 @@ export default function PublishModal(props: Props) { ...@@ -19,6 +20,8 @@ export default function PublishModal(props: Props) {
}); });
const [form] = Form.useForm(); const [form] = Form.useForm();
const position = useGeolocation(); const position = useGeolocation();
const { reloadRequirements, setReloadRequirements } =
useContext(CommonContext);
console.log("position", position); console.log("position", position);
useEffect(() => { useEffect(() => {
...@@ -40,6 +43,7 @@ export default function PublishModal(props: Props) { ...@@ -40,6 +43,7 @@ export default function PublishModal(props: Props) {
if (res.code === "200") { if (res.code === "200") {
props.onCancel && props.onCancel(); props.onCancel && props.onCancel();
window.messageApi.success("发布成功"); window.messageApi.success("发布成功");
setReloadRequirements(!reloadRequirements);
setTimeout(() => { setTimeout(() => {
form.resetFields(); form.resetFields();
}, 500); }, 500);
......
import React, { createContext, Dispatch, SetStateAction, useState } from "react";
export const CommonContext = createContext<{
reloadRequirements: boolean; //更新项目需求列表
setReloadRequirements: Dispatch<SetStateAction<boolean>>;
}>({
reloadRequirements: false,
setReloadRequirements: () => {}
});
type Props = {
children: React.ReactNode;
};
const CommonProvider = ({ children }: Props) => {
const [reloadRequirements, setReloadRequirements] = useState(false);
return (
<CommonContext.Provider
value={{
reloadRequirements,
setReloadRequirements,
}}
>
{children}
</CommonContext.Provider>
);
};
export default CommonProvider;
...@@ -6,7 +6,8 @@ import { message } from "antd"; ...@@ -6,7 +6,8 @@ import { message } from "antd";
import { useEffect } from "react"; import { useEffect } from "react";
import Head from "next/head"; import Head from "next/head";
import Script from "next/script"; import Script from "next/script";
import UserProvider, { UserContext } from "~/lib/userProvider"; import UserProvider from "~/lib/userProvider";
import CommonProvider from "~/lib/commonProvider";
export default function App({ Component, pageProps }: AppProps) { export default function App({ Component, pageProps }: AppProps) {
const [messageApi, contextHolder] = message.useMessage(); const [messageApi, contextHolder] = message.useMessage();
...@@ -29,9 +30,11 @@ export default function App({ Component, pageProps }: AppProps) { ...@@ -29,9 +30,11 @@ export default function App({ Component, pageProps }: AppProps) {
</Head> </Head>
<Script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></Script> <Script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></Script>
{contextHolder} {contextHolder}
<UserProvider> <CommonProvider>
<Component {...pageProps} /> <UserProvider>
</UserProvider> <Component {...pageProps} />
</UserProvider>
</CommonProvider>
</> </>
); );
} }
import { Button, Empty, Pagination, Popconfirm, Spin, Tooltip } from "antd"; import { Button, Empty, Pagination, Popconfirm, Spin, Tooltip } from "antd";
import router from "next/router"; import router from "next/router";
import React, { useState, useEffect, useContext } from "react"; import React, { useState, useEffect, useContext } from "react";
import { CommonContext } from "~/lib/commonProvider";
import { UserContext } from "~/lib/userProvider"; import { UserContext } from "~/lib/userProvider";
import api, { Item } from "./api"; import api, { Item } from "./api";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
...@@ -25,12 +26,13 @@ export default function Requirements(props: Props) { ...@@ -25,12 +26,13 @@ export default function Requirements(props: Props) {
const [abort, setAbort] = useState<AbortController | null>(null); const [abort, setAbort] = useState<AbortController | null>(null);
const [reload, setReload] = useState(false); const [reload, setReload] = useState(false);
const { userInfo } = useContext(UserContext); const { userInfo } = useContext(UserContext);
const { reloadRequirements } = useContext(CommonContext);
useEffect(() => { useEffect(() => {
//中断前一次请求 //中断前一次请求
abort?.abort(); abort?.abort();
setAbort(new AbortController()); setAbort(new AbortController());
}, [pageParams, props.params, reload]); }, [pageParams, props.params, reload, reloadRequirements]);
useEffect(() => { useEffect(() => {
if (!abort) { if (!abort) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论