问题标签 [react.rb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reactjs - 在测试之间重置 react.js
我正在使用 React.rb(一个 opal-ruby 绑定到 react.js)和 Opal-rspec 进行测试。
似乎我需要在测试之间重置 react 的内部结构,因为在某些测试中我遇到了可怕的“无法读取未定义的属性 'firstChild'”错误。
如果我将“失败”测试移动到第一个测试,那么错误就会消失(但可以在以后的测试中出现。)
React.rb 没有被加载两次,我已经确定了几种方法,包括将 console.log 放入 react 源文件的第一行。
SOOO 看来我需要一种方法来完全清除测试之间的反应状态。有什么办法吗?
ruby - 蛋白石遇到问题并尝试渲染一个简单的 react.rb 模板
我正在尝试将 react.rb gem 与蛋白石一起使用,但是我遇到了麻烦。
下面是一个简单的 hello world 组件,没什么复杂的。
这样做:
得到了我的期望,这个:
问题是当我尝试将模板渲染到 dom 时。
这:
只是给我:
所以我认为这是因为document.body
尚不存在,但是以下都不能访问窗口工作(或文档):
似乎没有适用于 JS 等效项的蛋白石命令文档,而且我找不到任何示例工作。
我快要拔头发了,我该怎么办?
编辑:
执行以下操作实际上有效:
我没有使用 jquery,所以我必须执行以下操作才能获得document.ready
:
但它是 suuuuper hacky。
jquery - 试图让 react.rb 模板使用 opal-jquery 在蛋白石中呈现,现在可以正常工作了
我承认这与我之前的问题相似,但并不完全相同。由于我最终使用了 ajax 请求,因此我决定将 opal-jquery 添加到我的堆栈中(除非您知道更简单的方法)并切换到使用Document.ready?
它提供的功能。
我的函数现在看起来像这样:
我这样称呼它:
问题是,在此之前它可以正常工作,而现在,它不是,我遇到了一个Uncaught NoMethodError: undefined method '[]' for nil
错误,它正在工作,然后它突然开始这样做。
错误是因为某种原因 Element.find[mount_point]
正在返回nil
,我不知道为什么。它应该在加载 dom 后运行,因此挂载点'#view_port'
应该存在;正如您在此处看到的,它肯定存在于 dom 中:
我什至试过把它包起来,window.addEventListener("load", function () {}
但没有效果。
为什么现在不起作用?我错过了什么?
ruby - opal-jquery ajax 请求发送格式错误的 json 字符串
我正在使用 opal-jquery 向我的后端发送 ajax 请求,但是当我尝试在后端访问它时,json 有效负载格式错误。
当我puts @params.to_s
在后端执行时,它显示为:
因此,要获取登录详细信息,我必须这样做:
我的前端(蛋白石)提交请求如下所示:
我绝对知道细节的格式正确,所以这不是问题。
我想最后归结为是否
opal-jquery 错误地发送 post 请求
sinatra 不正确地解析请求。
我不确定它是哪一个,但我倾向于相信它是前者,因为在我改用 react.rb 作为前端之前它运行良好。
ruby - 通过 ajax 提交的表单请求与每个后续提交相乘
我有一个发出 ajax 请求的表单,问题是每次我点击它时,它发出请求的次数都会成倍增加。
现在我确定这是因为我设置了提交拦截的方式,但我不知道如何在仍然将其封装为单个组件的同时做到这一点。
我使用 react 作为我的视图层,并且我附加了一个函数,其中包含拦截请求的代码,并且在afterMount
回调和after_update
回调中都调用了这个函数;如果我不这样做,那么表单提交永远不会被拦截,或者它只拦截一次,然后只是进行正常提交。
现在显然它正在成倍增加,因为这些事件会触发并添加一个额外的提交处理程序。
我正在使用 opal 和 react.rb 所以代码看起来有点奇怪。
这是我拦截表单上的提交操作的函数
这是我的回电:
我能够通过检查组件状态是否已经在请求中间来减少请求的数量,虽然这并没有减少添加的提交处理程序的数量,但它确实阻止了很多事情,但是它不会停止添加处理程序的实际乘法。
ruby-on-rails - 将服务器端 Ruby 嵌入到 rails 中的蛋白石文件
是否可以将服务器端 ruby 嵌入到 Opal .js.rb 文件中?换句话说,我需要访问例如User.find(1)
Rails 中的一些蛋白石文件,就像使用 .erb 一样。
reactjs - 如何从 react.rb 组件生成多个 dom 元素
我正在尝试使以下代码正常工作:
但我不断收到此错误:
Exception raised while rendering #<HelloWorld:0x489>
RuntimeError: a components render method must generate and return exactly 1 element or a string
react.rb - 无法使用 react.rb 设置 defaultValue
我的代码是
input(type: "text", name: "name", defalut_value: obj.name)
,我也试试这个
input(type: "text", name: "name", defalutValue: obj.name)
我总是
<input type="text" name="name" data-reactid=".0.1.1.1.1">
没有“defalutValue”
opalrb - 未捕获的 NoMethodError:未定义的方法 `render' for #
我想在 Opal 文件中使用此代码安装我的组件:
Element['#wizard_param_grid_editor'].render do
ZGrid(rows: @work_spaces)
End
我得到了错误
我想在 Opal 文件中使用此代码安装我的组件:
我得到了错误
Uncaught NoMethodError: undefined method render' for #]>
不,您使用并发对,它使用默认线程池的任务,并且您使用Run
方法实例化任务,所以问题不在这里。但是您这里的代码有两个主要威胁:
你真的不应该transBlock
每次都创建。的主要思想TPL Dataflow
是您创建块一次并在之后使用它们。所以你应该重构你的应用程序以减少你正在实例化的块的数量,否则不TPL Dataflow
应该使用这种情况。
您的代码中的另一个威胁是您明确阻止了线程!
从同步事件处理程序的方法调用await
for 任务会async void
阻塞线程,因为默认情况下它会捕获同步上下文。首先,async void
应该避免。其次,如果你是异步的,你应该一直是异步的,所以事件处理程序也应该是异步的。第三,您可以为您的任务使用延续来更新您的 UI 或使用当前同步上下文。
所以,你的代码应该是这样的:
我想在 Opal 文件中使用此代码安装我的组件:
Element['#wizard_param_grid_editor'].render do
ZGrid(rows: @work_spaces)
End
我得到了错误
我想在 Opal 文件中使用此代码安装我的组件:
我得到了错误
Uncaught NoMethodError: undefined method render' for #]>
不,您使用并发对,它使用默认线程池的任务,并且您使用Run
方法实例化任务,所以问题不在这里。但是您这里的代码有两个主要威胁:
你真的不应该transBlock
每次都创建。的主要思想TPL Dataflow
是您创建块一次并在之后使用它们。所以你应该重构你的应用程序以减少你正在实例化的块的数量,否则不TPL Dataflow
应该使用这种情况。
您的代码中的另一个威胁是您明确阻止了线程!
从同步事件处理程序的方法调用await
for 任务会async void
阻塞线程,因为默认情况下它会捕获同步上下文。首先,async void
应该避免。其次,如果你是异步的,你应该一直是异步的,所以事件处理程序也应该是异步的。第三,您可以为您的任务使用延续来更新您的 UI 或使用当前同步上下文。
所以,你的代码应该是这样的:
code-snippets - 我可以在片段中有自定义链接吗?
我可以使用 Stack Overflow 的新片段编辑器加载我自己的自定义库吗?我可以使用自定义脚本标签吗?例如,我想举一些使用内联反应红宝石的例子。