- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
({ foo, t-6ren">
在一个典型的 React/Redux 代码库中,你有像这样的 action creator 函数:
Actions.js:
export const addFoo = foo => ({ foo, type: 'ADD_FOO' });
然后您使用 connect
创建该函数的一个版本,该函数分派(dispatch)操作,并使其可用于组件:
Component.js:
import { addFoo } from 'Actions';
const mapPropsToDispatch = { addFoo };
const SomeComponent = connect(mapStateToProps, mapPropsToDispatch)(
({ addFoo }) =>
<button onClick={() => addFoo(5)}>Add Five</button>;
)
我在想,与其将每个 Action 创建者映射到使用它们的每个组件的 connect
中的分派(dispatch)版本,不如“预连接”会不会更简单、更清晰"提前所有 Action 创作者:
Store.js:
import { createStore } from 'redux'
const store = createStore(reducer, initialState);
export const preConnect = func => (...args) => store.dispatch(func(...args));
Actions.js (2.0):
import { preConnect } from 'Store';
export const addFoo = preConnect(foo => ({ foo, type: 'ADD_FOO' }));
Component.js (2.0):
import { addFoo } from 'Actions';
const SomeComponent = () =>
<button onClick={() => addFoo(5)}>A Button</button>;
我是否遗漏了为什么这样做不是一个好主意的任何明显原因?
最佳答案
您在此处的代码中引用了 dispatch()
函数:
export const preConnect = func => (...args) => store.dispatch(func(...args));
但是在 React-Redux 的世界中,我们的组件内部没有直接引用 dispatch()
函数。那么这是怎么回事?
当我们将 Action 创建器传递给 connect()
函数时,connect()
函数会对 Action 对象内部的函数执行特殊操作。
export default connect(mapStateToProps, { selectSong })(SongList);
connect()
函数本质上是将操作包装到一个新的 JavaScript 函数中。当我们调用新的 JavaScript 函数时,connect()
函数将自动调用我们的 Action 创建器,执行返回的 Action 并自动调用 dispatch()
函数对我们来说。
因此,通过将 action creator 传递给 connect()
函数,每当我们调用添加到 props 对象的 action creator 时,该函数将自动执行返回的操作并把它丢给我们的调度函数。
所有这些都在幕后发生,您在使用 connect()
函数时实际上不必考虑它。
这就是 redux 的工作原理,有很多连接,这是我相信人们对这个库的主要提示之一,所以我理解你想要预配置它的一些设置的心情,在这个在我看来,这是 Redux 设置中最困难的部分,即连接 Action 创建者和缩减器。
我认为预配置的问题是开发人员仍然需要知道如何编写这些函数,然后手动将它们 Hook 在一起,而不是在其他状态管理库中如何完成,如果它被一些人拿走了预配置过程的类型,我认为 Redux 变得更神奇,更难排除故障。同样,action creators 和 reducers 是将 Redux 架构组合在一起的最大挑战,因此掌握并了解如何解决该区域的问题几乎需要手动设置。
关于redux - 为什么不是 "pre-connect"Redux Action Creators?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49889405/
我正在尝试将 Parcelable 数据从一个 Intent 传递到另一个 Intent ,这是我得到的错误: 08-31 14:12:22.709: E/AndroidRuntime(9931):
我收到错误消息“Parcelable 协议(protocol)需要一个在类上名为 CREATOR 的 Parcelable.Creator 对象......”,但我确实有一个 Creator,但我不知
我喜欢 Qt Creator 中的深色“FakeVim”配色方案。然而,它只会使编辑器部分变暗,而其他一切都保持正常,这有点令人不安。有没有办法让 Qt Creator 全局使用这种黑暗方案? Vim
Qt Creator 中是否可以有构建后事件(如在 VC++ 中)?特别是,我想在构建可执行文件后将其复制到另一个文件夹。可以吗? 最佳答案 添加执行脚本以复制文件作为构建步骤,如下所示, 关于qt-
有没有办法在 Qt Creator 中获取打开文档的列表。 有时当 Qt Creator 崩溃并且在重新打开时无法恢复 session 时,在它崩溃之前有一个打开的文件列表会很方便。 最佳答案 不确定
Qt 似乎不像其他 IDE 通常那样在文件夹中构建文件,例如 netbeans 将头文件放在头文件夹中,将源文件放在源文件夹中等等。我已经看到这是在 Qt 中完成的,但我不知道为什么它不在我的电脑上。
我正在尝试创建一个 2 的上标,以显示用户在我的对话框中提供的字段之后的单位标签的平方。我在 Windows 上使用 Qt Creator v2.0.1。 QLabel 有一个文本字段和一个 text
我正在尝试更改 QT Creator 中的构建输出目录(即,我想输出到 ../../bin/debug 而不是输出到 ./debug)。我尝试通过项目模式编辑构建输出目录,但它是只读的。查看 .pro
如何在 QT Creator 中仅编译项目中的一个文件。 有快捷键吗? 例如,在 VS 中,您可以按 Ctrl F7 并编译当前的 cpp 文件。 最佳答案 现在可以做到这一点,至少是 Qt Crea
使用 Qt Creator 的 Memcheck 功能返回以下内容: valgrind: Bad option: --xml=yes, but no XML destination specified
我通常使用带有 cmake 的 Qt creator 来编程 C++ 项目。最近我读了很多关于介子的书,它很简单,我喜欢测试它。 This示例解释了如何设置介子。 在使用介子时,我仍然喜欢使用 Qt
我刚刚在我的机器上构建并安装了 QtQuick3D。我运行示例项目“立方体”。 它有效,我可以构建和执行它。它向我展示了一个可以用鼠标旋转的立方体。但是在 QML 编辑器中,我在所有 Viewport
作为一名已转向 Linux 的老 Borland C++ Bulder 程序员,我很高兴找到 QT 和 QT Creator。 但是我遇到了第一个障碍:我设计了一个带有一些控件的表单,并添加了一个菜单
Visual Assist X 为 Visual Studio 提供了一个很好的功能,称为 column indicator 。它在文本编辑器中的指定列上显示一条垂直线(我使用第 80 列)。这可以帮
这看起来应该很简单,但似乎没有一种方法可以像人们期望的那样做到这一点。 我在 qt Creator 中打开了两个单独的 C++ 项目,我想针对另一个项目中的一个项目进行包含/编译。 这是我的布局: p
问题: Qt Creator 是用 Qt Creator 构建的吗? 同样,Qt Designer 是用 Qt Designer 构建的吗? 顺便说一句,为什么有两个 Qt IDE?他们是竞争对手吗?
我坐在带有 Qt Creator v2.7 的 Ubuntu 12.04(也尝试过新版本,2.8 测试版)中,当我创建一个非 Qt 项目/普通 C++ 项目(CMake Build)时,一切似乎都很好
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: How to get Qt Creator to work with CDB? 我正在尝试将 Cdb 与 Qt C
Qt Creator 通常将注释着色为绿色,但我在 Qt 示例中看到了蓝色注释,而且 Qt Creator 似乎将所有以 //! 开头的注释着色为蓝色。 这是一个示例屏幕截图: 这是某种约定吗?蓝色代
我刚刚从英语下载站点http://qt.nokia.com/downloads上,在我的英语Windows 7系统上下载并安装了Qt Creator 1.3.1,显然,尽管帮助文件是英语,但Qt Cr
我是一名优秀的程序员,十分优秀!