小编Ash*_*son的帖子

React router - 更新URL哈希而不重新呈现页面

使用react-router我正在寻找一种更新页面URL/hash的方法,而不需要路由器重新呈现整个页面.

我正在开发一个完整的页面轮播,并希望每张幻灯片都有自己的URL(允许用户刷新页面并返回正确的幻灯片).旋转木马稍后会有类似于此演示的滑动,这意味着一张幻灯片已预先渲染.

这里有我的旋转木马的精简版.

当前的幻灯片更改如下所示:

onClickLeft: function() {
  this.setState({
    selected: this.state.selected - 1
  });
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,没有URL更新.我真正想要的是:

mixin: [Navigation],
onClickLeft: function() {
  this.transitionTo('carousel-slide', {num: this.state.selected + 1});
}
Run Code Online (Sandbox Code Playgroud)

这将设置当前幻灯片的支柱,允许旋转木马动画.但是,现在使用此方法会导致页面重新呈现,并且不显示任何动画.

我已经看到ReactCSSTransitionGroup用于路由转换,但是这似乎是为了渲染一个新页面并转换出旧页面.

如果已经有办法实现我正在寻找的东西,而我却错过了,有人能指出我正确的方向吗?

reactjs react-router

22
推荐指数
3
解决办法
3万
查看次数

在Redux中实现undo/redo

背景

有一段时间,我一直在讨论如何在Redux中使用服务器交互(通过ajax)实现undo/redo .

我已经提出了一个使用命令模式的解决方案,其中操作使用executeundo方法作为命令注册,而不是调度操作您调度命令.然后将命令存储在堆栈中并在需要时引发新操作.

我当前的实现使用中间件拦截调度,测试命令和调用Command的方法,看起来像这样:

中间件

let commands = [];
function undoMiddleware({ dispatch, getState }) {
  return function (next) {
    return function (action) {
      if (action instanceof Command) {
        // Execute the command
        const promise = action.execute(action.value);
        commands.push(action);
        return promise(dispatch, getState);
      } else {
        if (action.type === UNDO) {
            // Call the previous commands undo method
            const command = commands.pop();
            const promise = command.undo(command.value);
            return promise(dispatch, getState);
        } else {
            return next(action); …
Run Code Online (Sandbox Code Playgroud)

javascript undo-redo reactjs redux

15
推荐指数
1
解决办法
4413
查看次数

如何使用Reflux商店处理分层数据?

大纲

在我的应用程序中,我正在使用ReactReflux,并对我的数据进行分层设置.我正在尝试将我的应用程序的元素分解为单独的商店,以便能够正确地挂钩事件并分离问题.

我有以下数据流:

Workspaces -> Placeholders -> Elements

在此方案中,创建工作空间时,必须依次使用对新创建的工作空间的引用(ID)创建默认占位符.这同样适用于占位符与元素关系.

关键

Reflux方式似乎表明PlaceholderStore会从WorkspaceStore中侦听触发器,并将新创建的ID添加到this.trigger().

Reflux只允许从商店触发单个事件; 从而防止外部组件能够辨别createupdate动作.这意味着如果商店中的一个触发器发送ID argument[0],则后续触发器应该执行相同的操作(以保持一致).对于寻找多个工作空间更新的组件(例如重新排序/批量更新),这是一个问题.

不受欢迎的解决方案

我曾想过要加上一个概念StoreActions; 只有商店可以创建的操作,然后其他商店才会收听(有效地从商店中丢弃原始触发器).通过这些组件/商店可以监听特定事件,并且可以毫无顾虑地定制传递给所述事件的参数.这似乎是一种错误的方式去滥用Reflux事件系统.

救命

我应该尝试分解相关数据吗?是否有更好的方法来构建数据?

我已经阅读了关于聚合商店的信息,但没有看到任何解剖的实现.这些是通过将来自多个商店的数据放在一起提供解决方案吗?如果是,那么负责创建React组件可以收听的事件的是什么?

非常感谢任何人提供的任何帮助/见解!

reactjs refluxjs

12
推荐指数
1
解决办法
4152
查看次数

React路由器应用程序 - 路由标题

我正在学习React并使用React-router.我正在构建的应用程序是一个移动风格的应用程序,顶部导航菜单和下面的内容部分.当我浏览应用页面时,我想在菜单栏中添加一个页面"标题",以确定您当前所在的页面.

我的路线:

<Routes>
  <Route name='home' path='/' handler={HomePage}>
    <Route name='product-list' path='products/' handler={ProductList}/>
    <Route name='product-detail' path='product/:slug/' handler={ProductDetail} addHandlerKey={true}/>
  </Route>
</Routes>
Run Code Online (Sandbox Code Playgroud)

HomePage.render:

<div className="container">
  <NavigationMenu />
  <div className="contents">
    {this.props.activeRouteHandler()}
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

NavigationMenu.render:

<div className="navigationMenu">
  <div className="navigationMenuTitle>{this.props.title}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我的问题

到HomePage的子路由需要根据Ajax调用返回的内容设置其标题.

我原本想过为每条路线添加回调,将标题传递回父类,而父类又可以将这些数据传递给NavigationMenu.不幸的是,这不起作用:当您浏览页面时,重复调用的唯一函数是渲染,此处设置状态会引发Invariant Violation错误.

我的问题

  • 管理标题有更好的方法吗?
  • 跟踪当前页面是否有任何替代方法,而不是依赖路由渲染函数每次都将数据传递给回调(这看起来很脏)?

reactjs react-router

8
推荐指数
1
解决办法
4485
查看次数

草稿 JS 无序列表项目符号颜色

我已经在一个项目上实现了 Draft JS 作为一个简单的编辑器,但是我在设置无序列表的样式时遇到了麻烦,特别是更改项目符号的颜色以匹配文本颜色。

文档中似乎没有关于如何将样式应用于li包装unordered-list-item项目的信息。我可以选择文本并应用颜色,但这会产生如下所示的编辑器状态:

{
  "entityMap": {},
  "blocks": [
    {
      "key": "bcci",
      "text": "Heading",
      "type": "unstyled",
      "depth": 0,
      "inlineStyleRanges": [
        {
          "offset": 0,
          "length": 7,
          "style": "red"
        }
      ],
      "entityRanges": []
    },
    {
      "key": "28tv7",
      "text": "One",
      "type": "unordered-list-item",
      "depth": 0,
      "inlineStyleRanges": [
        {
          "offset": 0,
          "length": 3,
          "style": "yellow"
        }
      ],
      "entityRanges": []
    },
    {
      "key": "85hig",
      "text": "Two",
      "type": "unordered-list-item",
      "depth": 0,
      "inlineStyleRanges": [
        {
          "offset": 0,
          "length": 3,
          "style": "red"
        }
      ], …
Run Code Online (Sandbox Code Playgroud)

javascript draftjs

5
推荐指数
1
解决办法
3135
查看次数