Ich versuche, eine wiederverwendbare Toast-Komponente zu erstellen.
Hier ist der Code: https://codesandbox.io/s/custom-toastify-toast-with-react-component-forked-mu2l9c?file=/src/Toast.js:146-680
Beim Rendern der Toast-Komponente selbst [Kommentare unten] wird der Toast wunderschön angezeigt.
return ( <> {/* <Toast /> */} ---> This one works perfectly. <input type="text" value={input} onChange={(e) => setInput(e.target.value)} name="input" /> </>
Allerdings versuche ich, den Toast durch die Öffentlichkeit zu erreichen toastMeta
来实现对 toast 的调用。这样调用者只需输入 toastMeta.message("please show up..")
. Optionale Parameter horizontale und vertikale Position werden ebenfalls übergeben.
Problem: Kann toastMeta.message("")
nicht zum Aufrufen der Toastkomponente verwenden
Hinweis: Bei diesem CustomToast handelt es sich um ein npm-Paket, daher muss der Aufrufer diese Bibliothek installieren und importieren toastMeta
.
export const toastMeta = { position: "top-right", message: "Error Toast" }; export const Toast = ({ className, children, ...props }) => { return ( <> <ToastContainer {...props}> {toast.error(toastMeta.message, { position: toastMeta.position, autoClose: 3000, hideProgressBar: false, closeOnClick: true, pauseOnHover: true, draggable: true, progress: undefined, theme: "colored" })} </ToastContainer> </> ); };
Rufen Sie nach jedem Tastendruck Toast an..
const [input, setInput] = useState(""); useEffect(() => { toastMeta("Error Message.."); }, [input]); return ( <> {/* <Toast /> */} <input type="text" value={input} onChange={(e) => setInput(e.target.value)} name="input" />
Grund für die Erstellung der Toast-Komponente:
Wird zur Versionskontrolle verwendet, da es eine der Komponenten der öffentlichen Bibliothek ist. Die gemeinsame Bibliothek enthält alle UI-Elemente.
Vielen Dank für Ihre Hilfe. Vielen Dank im Voraus.
您不能将对象作为函数调用,这也是实现不正确的原因之一,您需要使用 toast 的 ref,然后动态传递值。
请检查代码,希望对您有所帮助!
App.js
Toast.js