首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Notistack - withRouter和withSnackbar -如何?

Notistack 是一个用于 React 应用的通知(Snackbar)库,它提供了一种简单的方式来在应用中显示和管理通知消息。withRouterwithSnackbar 是 Notistack 提供的两个高阶组件(Higher-Order Components, HOCs),用于在 React 组件中注入路由和通知功能。

基础概念

  • 高阶组件(HOC):高阶组件是一个函数,它接受一个组件并返回一个新的组件。HOC 可以用于在多个组件之间共享逻辑。
  • withRouter:这个 HOC 使得被包裹的组件可以访问 React Router 的 history, location, 和 match 对象。
  • withSnackbar:这个 HOC 使得被包裹的组件可以访问 Notistack 的 enqueueSnackbarcloseSnackbar 函数,从而可以显示和关闭通知消息。

优势

  • 代码复用:通过 HOC,可以在多个组件之间共享路由和通知逻辑,避免重复代码。
  • 易于集成:Notistack 与 React Router 集成良好,可以轻松地在应用中添加通知功能。
  • 灵活性:可以自定义通知的样式和行为。

类型

  • withRouter:用于注入路由相关的属性和方法。
  • withSnackbar:用于注入显示和管理通知的方法。

应用场景

假设你有一个需要在用户执行某些操作后显示通知的应用,例如用户成功提交表单后显示成功消息。你可以使用 withSnackbar HOC 来实现这一功能。

示例代码

代码语言:txt
复制
import React from 'react';
import { withRouter } from 'react-router-dom';
import { withSnackbar } from 'notistack';

class MyComponent extends React.Component {
  handleSubmit = () => {
    // 处理表单提交逻辑
    this.props.enqueueSnackbar('表单提交成功!', { variant: 'success' });
  };

  render() {
    return (
      <div>
        <button onClick={this.handleSubmit}>提交</button>
      </div>
    );
  }
}

export default withRouter(withSnackbar(MyComponent));

遇到的问题及解决方法

问题:为什么 withRouterwithSnackbar 没有正确注入属性和方法?

原因

  1. 组件包裹顺序:确保 withRouterwithSnackbar 之外包裹组件,因为 withRouter 需要访问路由信息。
  2. 导入错误:确保正确导入了 withRouterwithSnackbar

解决方法

代码语言:txt
复制
import React from 'react';
import { withRouter } from 'react-router-dom';
import { withSnackbar } from 'notistack';

class MyComponent extends React.Component {
  // 组件逻辑
}

// 正确的包裹顺序
export default withRouter(withSnackbar(MyComponent));

问题:如何自定义通知的样式?

解决方法: Notistack 提供了多种方式来自定义通知的样式,包括使用 variant 属性和使用 style 属性。

代码语言:txt
复制
this.props.enqueueSnackbar('自定义样式消息!', {
  variant: 'info',
  style: { backgroundColor: '#ffcc00' }
});

参考链接

通过以上信息,你应该能够更好地理解和使用 Notistack 中的 withRouterwithSnackbar

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5款 React 实时消息提示通知(MessageNotification)组件推荐与测评

我自己在开发研究 Message / Notification 功能组件时,发现其实 Github 上有非常多制作精良,使用场景定位清晰的第三方消息提示组件库可用,社区成熟,代码简洁,直接引用即可,完全没必要自己写...React Toastify - 专注实时消息提示 各类样式随意修改 你想要的它都有 React Hot Toast - 动效丰富、代码简洁、样式自定义、轻量级消息提示组件 Notistack - 轻量级...notistack 样式高度可定制,改几个参数,让提示框符合你的网站风格,一个组件解决所有提示问题。...Reapop 提示框的动效很细腻,不仅有常规的滑动弹出,还有闪现渐变弹出等效果。当然,Reapop 也可以在提示框上加上两组按钮,方便我们在提示用户的同时,让用户执行触发相对应的事件。...扩展阅读:《React Echarts 使用教程 - 如何在 React 中加入图表》

5.7K50
  • react路由传参的几种方式

    component={ Home}> ‘dx’为被传递的字符串,在home组件中 通过 this.props.match.params 会收到 { name: 'dx' } 优点: 1、‘传参接收都比较简单...如果想真正获取到传递过来的参数,需要在对应的子组件中 this.props.location.search 获取字符串,再手动解析 或者 this.props.location.query 优点: 1、‘传参接收都比较简单...所谓隐式路由传参,就是传参的信息不回暴露在url中,当点击该link标签,想要获取到传递的参数,就在对应的路由组件中,通过 this.props.location.state 获取即可 优点: 1、‘传参接收都比较简单...强烈推荐,传递参数略微有些麻烦,接收参数十分方便,并且仍然可以接收路由组件自带的参数,安全,不会被用户看见 最后一种传参方式 withRouter 高阶组件给子组件绑定路由参数 withRouter...的情况下,该组件在this.props中才有路由参数方法 //否则,会报错 this.props.history.push({ pathname: '/home',

    2.9K10

    React 入门学习(十二)-- React 路由跳转

    message/detail/${id}/${title}`) } 同时我们可以借助 this.props.history 身上的 API 实现路由的跳转,例如 go、goBack 、goForward 3. withRouter...只有路由组件才能获取到 history 对象 因此我们需要如何解决这个问题呢 我们可以利用 react-router-dom 对象下的 withRouter 函数来对我们导出的 Header 组件进行包装...' // 在最后导出对象时,用 `withRouter` 函数对 index 进行包装 export default withRouter(index); 这样就能让一般组件获得路由组件所特有的 API...BrowserRouter HashRouter 的区别 它们的底层实现原理不一样 对于 BrowserRouter 来说它使用的是 React 为它封装的 history API ,这里的 history...浏览器中的 history 有所不同噢!

    1.3K10

    React 入门学习(十二)-- React 路由跳转

    message/detail/${id}/${title}`) } 同时我们可以借助 this.props.history 身上的 API 实现路由的跳转,例如 go、goBack 、goForward 3. withRouter...只有路由组件才能获取到 history 对象 因此我们需要如何解决这个问题呢 我们可以利用 react-router-dom 对象下的 withRouter 函数来对我们导出的 Header 组件进行包装...' // 在最后导出对象时,用 `withRouter` 函数对 index 进行包装 export default withRouter(index); 这样就能让一般组件获得路由组件所特有的 API...BrowserRouter HashRouter 的区别 它们的底层实现原理不一样 对于 BrowserRouter 来说它使用的是 React 为它封装的 history API ,这里的 history...浏览器中的 history 有所不同噢!

    2.8K30

    应用connected-react-routerredux-thunk打通react路由孤立

    对于 Redux 应该如何、何时使用的更多建议,请看:“您可能不需要Redux” Redux之道,第1部分-实现意图 Redux之道,第2部分-实践与哲学 Redux 常见问题 Redux 的创造者...// after import { withRouter } from 'react-router-dom' export default withRouter(connect(mapStateToProps...: 需要注意:withRouter 只是用来处理数据更新问题的。...所以在使用 withRouter 解决更新问题的时候,一定要保证 withRouter 在最外层,比如withRouter(connect()(Component)),而不是 connect()(withRouter...再发出一个 Action,触发 State 更新为“操作结束”,View 再次重新渲染redux-thunk异步操作至少送出两个 Action,第一个 Action 跟同步操作一样,直接送出即可,那么如何送出第二个

    2.4K00

    hippy-react 三端同构 — 路由

    两端的功能也存在着差异,导致无法实现原生web的同构 以下是 @hippy/react @hippy/react-web 中的 Navigator 组件的实现方式 1.1 @hippy/react...newProps} /> ); } } export default Navigator; 2. hippy项目路由实现 使用 react-router 来管理多页面,实现 Hippy 原生web...经过分析实现,无法在 Hippy 中直接使用 react-router-native react-router 中的 MemoryRouter,基于纯js实现的路由,不需要依赖于 URL,这使得其可以应用在...因此使用 react-router 可以同时支持原生web页面切换,进行多页面开发 2.1 hippy中react-router使用 通过 Platform.OS 对当前平台进行判断 在原生项目中使用...React from "react"; import PropTypes from "prop-types"; import { withRouter } from "react-router";

    2.8K51

    react-router 入门笔记

    ) 命令式导航(history) 命令式导航,通过history上的方法实现 为props 添加 history 参数, 在组件内部获取路由相关的参数,及控制路由动作 withRouter...对于 Route 绑定的组件,组要是页面,本身已经将 路由接口包裹在props中, 而其他组件想获取路由接口需要通过 withRouter(compoent) 处理. withRouter 处理的组件必须包裹在... 标签中s, 也就是说, 子组件中路由参数等,来自于包裹的 Router 对象 // 使用 withRouter 处理组件,组件props中将包含 路由相关对象, { match, location...() =>( 路由嵌套 path='/sub' ) }> /* ** 这是个路由冲突的例子, 可以看到,在父组件子组件中...参考: React router的Route中componentrender属性的使用 children 无论路径是否匹配都将被渲染, 不同的是, 对于已匹配的路径,children 组件内将获取到

    1.6K20

    React 代码共享最佳实践方式

    React官方在实现一些公共组件时,也用到了高阶组件,比如react-router中的withRouter,以及Redux中的connect。在这以withRouter为例。...withRouter的实现原理: const withRouter = (Component) => { const displayName = `withRouter(${Component.displayName...,location等 export default withRouter(TopHeader) 由于高阶组件的本质是获取组件并且返回新组件的方法,所以理论上它也可以像mixin一样实现多重嵌套。...Render Props使用场景 我们在项目开发中可能需要频繁的用到弹窗,弹窗 UI 可以千变万化,但是功能却是类似的,即打开关闭。...Hook的灵活之处还在于,除了官方提供的基础钩子之外,我们还可以利用这些基础钩子来封装自定义钩子,从而实现更容易的代码复用。

    3K20

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券