- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前对使用 Flux 和现在使用 Redux 在我的商店中填充初始状态所想出的技巧并不满意。
我总是在初始页面加载时发送 JSON 有效负载。在我的一些应用程序中,通用 JavaScript 不是一个选项,因为它们并不全部受 Node.js 支持。我想重点关注如何在客户端上预加载数据的“最佳实践”和模式。然后,我觉得迁移到服务器是微不足道的。
以下是我目前在工作中以及在其他一些使用 Redux 的玩具应用程序中所做的事情的要点:
https://gist.github.com/kevinold/5767bb334472b7e2bfe3
总结:
这有效,我们没有遇到任何问题,但感觉就像是我不太满意的黑客行为。另外,我觉得 Redux 的初始状态对我这样做并不满意。
根据http://rackt.org/redux/docs/recipes/ServerRendering.html和“客户端”部分,我可以将初始状态传递到我的商店。
这是我正在帮助的另一个项目 (KeystoneJS) 的补丁。我将其 Keystone 对象传递到初始状态:
虽然这确实有效,但正如您所看到的,我被迫匹配整个组合Reducers(https://github.com/kevinold/keystone/commit/6f80c2f6f1e5c081361369a8bb31b75f1e62460f#diff-b4b498ca92c4d05e050b45c725c26f9d)的输出形状,否则我将收到控制台警告等。
我可能在处理这个问题上非常懒惰,但是当我添加/更改与 reducer 相关的任何内容(添加 reducer ,它们的组成方式等)时,我会尝试限制更新另一条数据。
我意识到我可能必须这样做才能正确地将这个初始状态放入 reducer 中。
我目前正在消化 ( https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/client.js#L25 ) 如何处理它的初始状态。
我非常感谢一些关于对其他人有效的“最佳”和“现实世界”实践的反馈。
最佳答案
我不太明白这个问题,但我会尽力回答。
In componentDidMount() I'm dispatching actions that “receive” and handle the various pieces of data. (These “receive” methods are used when processing these bits of data when they are fetched async via a request action, and I’m repurposing them here since I already have the data.)
这是一个不好的 dispatch 他们的地方。如果您选择分派(dispatch)操作而不是直接提供初始状态,请在渲染之前执行此操作。换句话说,在创建商店后立即执行此操作!这样您就不会渲染初始空白状态。
While that does work, as you can see, I’m forced to match the shape of the output of my overall combinedReducers (https://github.com/kevinold/keystone/commit/6f80c2f6f1e5c081361369a8bb31b75f1e62460f#diff-b4b498ca92c4d05e050b45c725c26f9d) or I will get console warnings, etc.
您不应该手动创建 initialState
对象。您应该在服务器上创建一个 Redux 存储,并在其中执行 dispatch
操作以预先填充数据,当准备就绪时,调用 store.getState()
来检索您想要传递给客户的状态。在客户端上,您可以从全局变量中读取它,并用它创建客户端存储实例。 换句话说,您永远不必手动创建 initialState
- 您应该使用 store.getState()
在服务器上获取它,并将其传递给客户端,并用它创建一个商店。
所以我不明白你描述的问题。如果您的 reducer 名称或嵌套发生变化,它也会在服务器上发生变化。您不需要做任何事情来“修复它”——如果您在客户端和服务器上都使用 Redux,它们的状态结构将匹配。
I’d really appreciate some feedback on "best" and "real world" practices that are working for others.
如果您在服务器上使用 Redux,请如上所述预填充存储,并将其状态传递给客户端。在这种情况下,您需要使用 createStore()
的 initialState
参数。
如果您出于某种原因不在服务器上使用 Redux,但您仍想预填充数据(例如,您可能使用 Node 以外的其他东西),则使用以下方法调度操作是您的下一个最佳选择,因为它不需要您的后端知道状态形状。在这种情况下,您应该将这些操作作为 JSON 传递给客户端,然后 dispatch()
所有这些都在商店创建之后。
关于reactjs - 在 Redux 应用程序中预加载初始状态的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924429/
我正在阅读哈德利的 Advanced R并尝试一些东西。我正在尝试创建一个 lazy闭包函数返回一个带有提供的函数 data.frame在其环境中以及使用 with并且能够在以后提供额外的函数参数。
我有两个 ViewController。初始 ViewController 是输入和存储 URL 的地方。此初始 ViewController 的 viewDidLoad 还应该在应用程序启动时开始加
你是怎么用的 对于应用程序中的 ListView 项也应该在设备 <11 上运行? 由于 activated_state 在 HC 之前不可用,我只能想到两个肮脏的解决方法: 在您的 Activit
我正在为 android (2.1 > 3.1) 编写一个应用程序,我想使用熟悉的做法,即在 Honeycomb 应用程序中使用应用程序图标来进入家庭 Activity ,但是,当我之前运行该 Act
如果搜索的键不存在,我如何覆盖方法 GET 或编写一个将在服务器端执行的新函数返回另一个键值? 示例: 如果关键字“word_1 word_2 word_3 word_4”不存在则搜索关键字“word
对于我的存储库,我使用的是 Git 和 Stash。在 Stash 端,我限制了(只读)对 master 的访问权限,因此任何用户都可以从 master 分支分支以获取功能/分支,但不能直接 merg
如何配置dgrid及其存储以定义渲染行时是否已经选择了行? 例如,如果我的行数据是这样的: { id: 1, name: 'Item Name', selected: true } 我当前
有没有一种方法可以将变量从一个 BeanShell 前/后处理器引用到另一个 BeanShell 处理器(它们在同一个线程组中)? 如果我在 HTTP 请求下的 BeanShell 预处理器中创建了一
问题 我已尝试添加预操作 shell 脚本,这些脚本会根据我正在构建的内容打开/关闭我的 .pch 文件中的某些定义。 但是,在运行构建时,没有任何反应。我不是一个流利的 shell 脚本编写者,所以
我有一个 HTML 字符串用作 jQuery 输入文档。 // the variable html contains the HTML code jQuery( html ).find( 'p' ).
在 Mercurial 中允许 merge 之前有没有办法进行一些检查? 通过将以下内容添加到 ~/.hg/hgrc,我找到了更新前 Hook ,并拥有一个在允许更新之前运行的脚本: [hooks]
总结: 预 Controller Hook 是否在缓存期间执行?是否有任何 Hook 点可以执行? (系统前?) 我应该强调一个事实,即 Hook 不会影响发送到浏览器的内容。这不是问题。 详细版:
我正在使用适用于 android 的 Skobbler Map API,到目前为止它一直非常好。按照官方的“操作方法”,我已经能够将 map 应用到我的应用程序中。比我可以让应用程序下载 map 并离
当我安装bcrypt时我的 hapi js 项目的模块尚未安装,它显示类似 node-pre-gyp install --fallback-to-build 我尝试通过运行来安装; npm i nod
我试图使用此代码的变体: apply plugin: 'java' apply plugin: 'idea' idea.workspace.iws.withXml { provider ->
假设我们有一个 PHP 项目,其依赖项 A 和 B 分别依赖于 PHP 库 X,但版本不同。 通常,人们会使用诸如 composer 之类的 PHP 依赖管理器,它可以通过在与 A 和 B 兼容的版本
这似乎违背了代码块的目的,但我希望能够在代码块中加粗。例如,如果我想将返回行加粗: int main(void) { **return 0;** } 最佳答案 您必须在 HTML 中执行此操作
我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?我查看了 Thomas Wolf ( https://github.com/huggingface/trans
我有两个模式: 技能: var mongoose = require("mongoose"); var SkillSchema = new mongoose.Schema({ skill: {
我这里有问题。这适用于 Chrome,但我无法在 IE11 的 index.html 中使用任何动画。当它不想工作时,我会看到一个静态屏幕。同样在 IE 中,消息不会像它应该的那样消失。如果我将 di
我是一名优秀的程序员,十分优秀!