我正在尝试创建一个可重用的吐司组件。
代码如下:https://codesandbox.io/s/custom-toastify-toast-with-react-component-forked-mu2l9c?file=/src/Toast.js:146-680
在渲染吐司组件本身 [下面的注解] 时,toast会漂亮地弹出。
return (
<>
{/* <Toast /> */} ---> This one works perfectly.
<input
type="text"
value={input}
onChange={(e) => setInput(e.target.value)}
name="input"
/>
</>
然而,我试图使用暴露的toastMeta
来实现对吐司的调用。这样调用者就可以简单地输入toastMeta.message("please show up..")
来获取Toast。同时传递一个可选的参数horizontal和vertical position。
**问题:**无法使用toastMeta.message("")
调用吐司组件
- 注意:此CustomToast将是一个npm包,因此调用者必须安装此库并导入
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>
</>
);
};
每击一次键后就叫吐司。
const [input, setInput] = useState("");
useEffect(() => {
toastMeta("Error Message..");
}, [input]);
return (
<>
{/* <Toast /> */}
<input
type="text"
value={input}
onChange={(e) => setInput(e.target.value)}
name="input"
/>
创建吐司组件的原因:
用于版本控制,因为它是公共库的组件之一。公共库具有所有UI元素。
非常感谢你的帮助。先谢谢你。
1条答案
按热度按时间jjhzyzn01#
你不能把一个对象作为一个函数来调用,这也是实现不正确的一个原因,你需要使用吐司的ref,然后动态地传递值。
请检查代码,我希望这将帮助你!
App.js
Toast.js