我想在输入状态为submit之后获取动态API路由.但我不知道如何将状态从react传递到getServerSideProps.

这是我的密码

export default function Home(props) {
    const { data } = props;
    const [input, setInput] = useState("");
    const handlerChange = (event) => {
        setInput(event.target.value);
    };
    const handlerSubmit = () => {
        console.log(event.target.value);
        setInput("");
    };

    return (
        <input
            type="text"
            className="form-control"
            placeholder="Group Name"
            value={input}
            onChange={handlerChange}
            onKeyDown={(event) =>
                event.key === "Enter" && handlerSubmit(event)
            }
        />
    )

export async function getServerSideProps() {
    const res = await fetch(`http://localhost:3000/api/searchGroup/${input}`)
    const data = await res.json()
  
    return { props: { data } }
}

推荐答案

您应该在handlerSubmit回调中使用客户端更新的input值发出请求,并将data保存在状态变量(例如dataToRender)中.

const getData = async (input) => {
    const res = await fetch(`http://localhost:3000/api/searchGroup/${input}`)
    return res.json()
}

export default function Home(props) {
    const { data } = props;
    const [dataToRender, setDataToRender] = useState(data);
    const [input, setInput] = useState("");

    const handlerChange = (event) => {
        setInput(event.target.value);
    };

    const handlerSubmit = async (event) => {
        setInput("");
        const newData = await getData(event.target.value);
        setDataToRender(newData);
    };

    return (
        <input
            type="text"
            className="form-control"
            placeholder="Group Name"
            value={input}
            onChange={handlerChange}
            onKeyDown={(event) =>
                event.key === "Enter" && handlerSubmit(event)
            }
        />
    )
}

作为上述方法的替代方法,如果您绝对需要将请求输入getServerSideProps,那么您可以将input值作为查询参数传递,并从context.query.input输入getServerSideProps读取它.

// On the client-side
import { useRouter } from "next/router";

export default function Home(props) {
    const router = useRouter()    

    const handlerSubmit = () => {
        console.log(event.target.value);
        setInput("");
        router.push(`${router.pathname}?input=${event.target.value}`);
    }
    
    // Remaining code...
}
// On the server-side
export async function getServerSideProps(context) {
    const res = await fetch(`http://localhost:3000/api/searchGroup/${context.query.input ?? 'default-value'}`)
    const data = await res.json()
  
    return { props: { data } }
}

Javascript相关问答推荐

为什么我会获取MUI Date TimePicker TypHelp:Value.isValid不是AdapterDayjs.isValid中的函数

追踪执行顺序

如何制作删除按钮以从列表中删除该项目所属的项目?

在卡信息之间切换

如何从对象嵌套数组的第二级对象中过滤出键

如何在JavaScript中通过一次单击即可举办多个活动

如何在JavaScript中在文本内容中添加新行

如何访问Json返回的ASP.NET Core 6中的导航图像属性

提交表格后保留Web表格中的收件箱值?

Angular中计算信号和getter的区别

为什么promise对js中的错误有一个奇怪的优先级?

保持物品顺序的可变大小物品分配到平衡组的算法

在浏览器中触发插入事件时检索编码值的能力

创建以键值对为有效负载的Redux Reducer时,基于键的类型检测

在SHINY R中的嵌套模块中,不能使用Java代码

使用Document.Evaluate() Select 一个包含撇号的HTML元素

如何使用Astro优化大图像?

React:防止useContext重新渲染整个应用程序或在组件之间共享数据而不重新渲染所有组件

判断函数参数的类型

如何根据查询结果重新排列日期