如何从另一个页面调用 useState?

Jm *_*gay 5 javascript reactjs react-router use-state

基本上,每当我在我的 handleDelete 函数中删除一个项目时,它都会返回到主页,我想显示一条消息,说明您的产品已成功删除约 5 秒钟。

在我的 index.js 中,我首先将 message 设置为 false。并且在我的 ProductAttribute 中,每当我单击它时,设置的消息将为 true,并将在我的 UI 中的 Index.js/ 中显示该消息。

我的 handleDelete 函数

import React, { useState } from "react";
import { Header, Button, Modal } from "semantic-ui-react";
import axios from "axios";
import baseUrl from "../../utils/baseUrl";
import { useRouter } from "next/router";

function ProductAttributes({ description, _id }) {
    const [modal, setModal] = useState(false);
    const router = useRouter();

async function handleDelete() {
    const url = `${baseUrl}/api/product`;
    const payload = { params: { _id } };
    await axios.delete(url, payload);
    router.push("/");
    setMessage(true);
    setTimeout(function () {
        setMessage(false);
    }, 5000);
}
Run Code Online (Sandbox Code Playgroud)

在我的 Index.js 中。我的 useState 中的 setMessage 没有从 ProductAttributes 文件中调用。

import React, { useEffect, useState } from "react";
import axios from "axios";
import ProductList from "../components/Index/ProductList";
import baseUrl from "../utils/baseUrl";
import { Message, Container } from "semantic-ui-react";

function Home({ products }) {
    const [message, setMessage] = useState(false);
    return (
        <>
            <Container>
                {message ? (
                    <Message
                        deleted
                        icon="checked"
                        color="red"
                        content=" Product Successfully Deleted"
                    />
                ) : (
                    ""
                )}
            </Container>
            <ProductList products={products}></ProductList>
        </>
    );
}
Run Code Online (Sandbox Code Playgroud)

如何在 ProductAttributes 中使这个 setMessagebe 可调用?我在父子关系中做得对吗,还是应该将子项中的 useState 带给父项?

pix*_*Cat 1

如何使 setMessage 在 ProductAttributes 中可调用?

一个好的实践是创建一个处理程序函数,该函数委托给 setState 函数,并将该函数的引用作为 props 传递给 ProductAttributes。

这是一个例子:

const [counter, setCounter] = useState(0);
const handleIncrementCounter = () => setCounter(counter + 1);
<ChildComponent handleIncrementCounter ={handleIncrementCounter }/>
Run Code Online (Sandbox Code Playgroud)

然后在 ChildComponent 中..

function ChildComponent(props) {
   return (
      <button onClick={props.handleIncrementCounter}/>
   );
}
Run Code Online (Sandbox Code Playgroud)