【问题标题】:Manually trigger Bacon.js stream update?手动触发 Bacon.js 流更新?
【发布时间】:2015-07-31 14:26:23
【问题描述】:

我对 FRP 和 bacon.js 很陌生,所以我可能会做一些非常愚蠢的事情。

测试应用有一个文本区域和一个提交按钮;提交按钮将值添加到列表中,每次发生更改时我都会使用 React 显示列表。这是代码的要点:https://gist.github.com/svileng/1f3702df855b50ed2f5e

我正在尝试修复的错误是我可以多次单击提交按钮,并且来自 textarea 的最后一个值不断添加到列表中。问题(我猜)是在第 18 行,我手动清除了 textarea 的值。所以事件流newCommentValueS和属性newComment没有更新,最后一个值挂了。

我该如何解决这个问题或解决这个问题?谢谢!

【问题讨论】:

    标签: javascript reactjs frp bacon.js


    【解决方案1】:

    解决此问题的一种方法是使用来自 bacon.jquery 的textFieldValue。它创建一个模型,它是可以写入的属性的扩展。您的代码将类似于:

    var newCommentValueM = Bacon.$.textFieldValue("#new-comment", "")
    var newComment = newCommentValueM.filter(v => v.length > 0)
    
    var commentAdded = Bacon.when(
        [newComment, buttonClickS], (comment, click) => {
            console.log("Submit comment: " + comment)
            newCommentValueM.set("")
            return comment
        }
    )
    

    【讨论】:

    • 感谢您的回答,OlliM!不过,这似乎仅适用于 。是否有一个纯 JS 解决方案也可以处理
    • 你可以用[Bacon.Binding](github.com/baconjs/bacon.model#baconbindingoptions)创建你自己的Bacon.Model,这就是bacon.jquery的实现方式。
    • 如果您使用 React 编写应用程序,我建议使用 react 事件处理程序和 Bacon.Bus 实例的组合从 dom 获取值 - 将 dom 事件处理程序与使用 React 创建的元素一起使用可能会导致复杂性和错误。
    猜你喜欢
    • 2017-10-03
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多