首页
学习
活动
专区
工具
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.8K50
  • 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路由传参的几种方式

    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',

    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 代码共享最佳实践方式

    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

    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路由的基本使用 常用组件说明 BrowserRouterHashRouter组件 Link组件 Route组件 NavLink组件 Switch组件 Routes组件...Redirect组件 from属性to属性 exact strict 路由组件一般组件 路由的执行过程 编程式导航 withRouter 默认路由 匹配模式 模糊匹配模式 精确匹配 pushreplace...此时可以用withRouter函数。...withRouter是一个函数,可以加工一般组件,让一般组件具备路由组件所特有的API,通过props传递三个属性:history/location/match withRouter的返回值是一个新组件...是一个函数,可以加工一般组件,让一般组件具备路由组件所特有的API // withRouter的返回值是一个新组件 export default withRouter(Header) ​ 默认路由 默认路由表示进入到页面后就能匹配到的路由

    2.6K10
    领券