我尝试在用户在我的react应用程序中发出任何请求时显示警报。问题是,目前我正在为单独的组件使用单独的吐司组件。我应该如何在整个应用程序中使用一个toast组件。我尝试将toast组件放在App.jsx中,但为了管理toast消息和颜色,我必须进行属性钻取。这是我想避免的。我正在使用redux,所以我不能使用useContext来管理吐司。任何想法都将不胜感激。
App.jsx
useContext
bttbmeg01#
我更喜欢使用一个名为HOC的高阶组件来 Package toast并为其提供必要的支持,这样,您就可以将toast放在一个中心位置,并使用HOC Package 需要显示toast的其他组件。例如:
toast
// withToast.js import { useState } from "react"; import { ToastProvider } from "@chakra-ui/core"; const withToast = (WrappedComponent) => { return (props) => { const [toast, setToast] = useState({ message: "", color: "", isOpen: false, }); const showToast = (message, color) => { setToast({ message, color, isOpen: true }); }; const hideToast = () => { setToast({ message: "", color: "", isOpen: false }); }; return ( <ToastProvider> <WrappedComponent {...props} showToast={showToast} hideToast={hideToast} toast={toast} /> </ToastProvider> ); }; }; export default withToast;
现在,您可以在由withToast Package 的每个组件中使用相同的toast:
withToast
import React from 'react'; import withToast from './withToast'; const App = (props) => { const { showToast, toast } = props; return ( <div> <button onClick={() => showToast("Hello, World!", "green")}> Show Toast </button> <Toast message={toast.message} color={toast.color} isOpen={toast.isOpen} /> </div> ); }; export default withToast(App);
您还可以在HOC中 Package 多个组件,并在 Package 组件内呈现的任何组件中使用showToast和hideToast函数,这样您就不必 * prop-drill * showToast和hideToast。
showToast
hideToast
1条答案
按热度按时间bttbmeg01#
我更喜欢使用一个名为HOC的高阶组件来 Package
toast
并为其提供必要的支持,这样,您就可以将toast放在一个中心位置,并使用HOC Package 需要显示toast的其他组件。例如:
现在,您可以在由
withToast
Package 的每个组件中使用相同的toast:您还可以在HOC中 Package 多个组件,并在 Package 组件内呈现的任何组件中使用
showToast
和hideToast
函数,这样您就不必 * prop-drill *showToast
和hideToast
。