在满足条件后使用 mufa 停止 React 组件之间的通信

2023-12-09

我正在使用 sub/pub 模式mufa在 React 组件之间而不是 props 之间进行通信。然后,我们将减轻父组件中的逻辑(正如您将在下面的代码片段中注意到的那样)。

const {on, fire} = mufa;
class Input extends React.Component {
   
   onChange(event) {
     fire('input_change', event.target.value);
   }

   render() {
     return <input onChange={this.onChange.bind(this)} />
   }
}

class Label extends React.Component {
   state= {text: ""};
   componentDidMount() {
     on('input_change', this.onInputChange.bind(this));
   }

   onInputChange(inputValue) {
      this.setState({text: inputValue});
      // I need code to stop calling this method when inputValue reaches 10 characters. 
       
    }

   render() {
     return <label > {this.state.text} </label>
   }
}

class App extends React.Component {
   // No logic here thanks to the Sub/Pub pattern. 
   render() {
     return (
        <div>
           <Label />
           <Input/>
    
        </div>
     )
   }
}


ReactDOM.render(<App />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdn.rawgit.com/abdennour/mufa/ddf78fd9/cdn/mufa-latest.min.js"></script>


<div id="app" ></div>

我关心的是如何阻止这种沟通Label and Input当输入值达到 10 个字符时。

我试过这个:

   onInputChange(inputValue) {


      if (inputValue.length <= 10 )  // <-- I add this.

         this.setState({text: inputValue});
    }

然而,这种情况并不妨碍调用onInputChange。我的目标是停止此订阅(以input_change事件)当输入立即达到 10 个字符时。


看起来像mufa有一种取消订阅的方法,如下所示:

const mufa = new Mufa();
const {on, fire, unsub} = mufa;
class Input extends React.Component {
   
   onChange(event) {
     fire('input_change', event.target.value);
   }

   render() {
     return <input onChange={this.onChange.bind(this)} />
   }
}

class Label extends React.Component {
   state= {text: ""};
   constructor(props) {
        super(props);
        this.sub = null;
   }
   componentDidMount() {
     this.sub = on('input_change', this.onInputChange.bind(this));
 
   }

   onInputChange(inputValue) {

      if(inputValue.length >= 10) {
       unsub(this.sub);
       return;
      };

      this.setState({text: inputValue});
      // I need code to stop calling this method when inputValue reaches 10 characters. 
       
    }

   render() {
     return <label > {this.state.text} </label>
   }
}

class App extends React.Component {
   // No logic here thanks to the Sub/Pub pattern. 
   render() {
     return (
        <div>
           <Label />
           <Input/>
    
        </div>
     )
   }
}


ReactDOM.render(<App />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://abdennour.github.io/mufa/mufa-latest.min.js"></script>


<div id="app" ></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在满足条件后使用 mufa 停止 React 组件之间的通信 的相关文章

  • 无法处理未捕获的类型错误:无法读取 createRouterReducer 处未定义的属性“位置”

    我在将路由器连接到 rootReducer 时遇到问题 控制台日志 未捕获的类型错误 无法读取未定义的属性 位置 在 createRouterReducer reducer js 005c 9 不知道如何修复它并将路由器连接到减速器 app
  • Javascript:使用 IIFE 和块语句之间的区别

    IIFE主要用于封装作用域 function let myVar 10 not global 但为什么不直接使用块语句呢 let myVar 10 also not global 除了范围封装之外 进一步使用 IIFE 是否还有其他好处 块
  • D3更新circle-pack数据新节点与现有节点重叠

    我正在关注一般更新模式 http bl ocks org mbostock 3808234但在分层方面存在问题 使用圆形包装布局 我pack新数据 update enter and exit圆形元素 然而 当新元素enter 它们重叠upd
  • 多次训练brain.js?

    在第一次训练后 如何将新信息 仅新信息 而不是所有信息 因为这会花费太多性能 训练到我的用 Brain js 制作的神经网络 它有点粗糙 但您可以使用以下结构来实现 如果我们加入 2 个训练数据集 旧数据集与新数据集 然后重新训练keepN
  • 如何使传单圆圈标记可拖动?

    使用传单 我创建了一个L circleMarker我希望它是可拖动的 var marker L circleMarker new L LatLng 48 94603 2 25912 draggable true bindPopup Circ
  • 由于 MIME 类型而导致资源被阻止?

    多年来我已经成功地包含动态创建的 javascript 文件 这是一个例子 https granadainfo com sups php locs 95 https granadainfo com sups php locs 95 正如你所
  • setTimeout范围问题

    我在控制玩家重生的函数内部定义了一个 setTimeout 我正在创建一个游戏 var player death function this alive false Console log death var timer3 setTimeo
  • 重定向时重新初始化类

    我目前在http example com parentdir module 2 此 URL 实际上加载 Module js 类 如以下路由所示
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • jquery 中可点击 div 中的按钮

    我有整个 div 您可以单击它来切换该 div 的主要部分 问题是我在该 div 中也有可点击的按钮 当我点击它时 它会执行它应该做的事情 但同时也会切换整个 div 我怎样才能禁用它 Use event stopPropagation 单
  • 我应该如何实现将状态保存到 localStorage?

    CODE var React require react var Recipe require Recipe jsx var AddRecipe require AddRecipe jsx var EditRecipe require Ed
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • Javascript location.href 到 mailto 触发 GET HTTP,该 HTTP 在 Chrome 中被取消

    我有一个按钮可以触发以下 javascript 函数 function sendEmail var mail mailto email protected cdn cgi l email protection location href m
  • 为什么我的 D3 SVG 图上的轴不会更新?

    I have 简单的 D3 散点图 http www raxacoricofallapatorius com test scattertest html我在显示数据的几个不同属性之间切换 但是虽然我可以更改数据点 并按照我想要的方式进行转换
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何使用 fetch() 和 WhatWG 流获取文件上传进度

    注意 我并不是在寻找任何替代方案 我知道这可以通过 XMLHttpRequest 来完成 我也不关心浏览器支持 我只想了解新的 即将推出的标准 我有一个File https developer mozilla org en US docs
  • 如何将数据推送到嵌套对象

    如何将另一个元素推入variables来自以下对象的属性 var request name Name id 3 rules name Rule name tags tagId 1 variables variable var1 matchT
  • VS Code 扩展 - 获取完整路径

    我正在为 VS Code 编写一个插件 我需要知道调用扩展的文件的路径 无论是从编辑器上下文菜单或资源管理器上下文菜单调用还是用户只需键入扩展命令 function activate context get full path of the

随机推荐

  • Android 平台上的“Fatal signal 7 (SIGBUS) at 0x5937abd0 (code=2)”到底是什么意思?

    致命信号 7 SIGBUS at 0x5937abd0 code 2 的确切含义是什么 回溯和堆栈信息如下 12 23 17 43 37 904 F libc 16421 Fatal signal 7 SIGBUS at 0x5937abd
  • 自定义 WordPress 3.5.2 插件“您没有足够的权限访问此页面。”

    我一直在尝试集成一个名为的自定义 WordPress 插件custom rss通过以下方式进入 WordPresshttp net tutsplus com tutorials wordpress creating a custom wor
  • 删除android中的特定联系人

    在我的应用程序中 我需要删除特定的CONTACT从电话通讯录中 但我只删除了特定号码 而不是整个联系人 所以请帮助我 提前致谢 要删除所有联系人 请使用以下代码 ContentResolver cr getContentResolver C
  • 升级后,@MapsId 在保存现有实体时抛出错误,但在其他方面工作正常

    我正在努力升级Spring Boot 1 5 21 项目 Java 8u221 to Spring Boot 2 1 9 Java 11 0 2 开放 在这两种情况下 我们都使用带有 spring boot 启动器和依赖解析器的 gradl
  • 如何在 AngularJS 中检测 HTML 渲染何时完成

    我对这个课题进行了广泛的研究 但无论我做什么 我发现实现这个目标都极其困难 我想在 AngularJS Web 应用程序中完全呈现所有元素时执行代码 我想我找到了建议使用路由器和视图的解决方案 但我无法在我的情况下使用它 因为它似乎需要某些
  • 使用 String hashCode() 方法? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 来自链接 http www tutorialspoint com java java string hashcode htm Java中hashCode和equals方法的关系 良好的
  • Python Pylab,如何更改指定轴大小的标签的大小

    我正在尝试绘制核衰变的微分横截面 因此 y 轴的大小约为10 38 m 2 pylab 默认将轴绘制为0 0 0 2 0 4 等并有一个 1e 38 在 y 轴的顶部 我需要增加一点字体大小 我尝试过调整标签大小 py tick param
  • 从 JFrame 修改独立的 JPanel

    我有一个带有两个独立 JPanel 的 JFrame 其中一个 JPanel 充满了 JButton 而另一个则有几个文本字段 我通过 JFrame 将鼠标侦听器添加到按钮 并且希望当从第一个 JPanel 触发事件时 第二个 JPanel
  • 将 XML Dsig 格式转换为 DER ASN.1 公钥

    我正在开发一个 iPhone 应用程序 它从 ASP NET Web 服务中检索 RSA 公钥 格式如下
  • 谷歌加API:“权限不足”错误

    我正在使用 api 搜索 google plus 这是我的网址 https www googleapis com plus v1 activities query internet 20marketing access token xxxx
  • __name__ 的目的是什么?

    什么是 name 做 我只见过它搭配 main 没有别的 我知道经典if name main 定义作为包运行与独立运行时的行为 但是还有什么其他用途 name name is main 如果您直接执行脚本 如果您要导入模块 name 是模块
  • 如何正确重载 __add__ 方法?

    我需要写一门涉及日期的课程 我应该超载 运算符允许将天数添加到日期中 解释一下它是如何工作的 ADate对象表示为 2016 4 15 格式为 年 月 日 添加整数 10 应该得到 2016 4 25 这Date阶级有价值观self yea
  • .NET 集合类的渐近复杂度

    是否有任何关于 NET 集合类方法的渐近复杂性 big O 和其他 的资源 Dictionary
  • 如何控制 JSF 中的访问和权限?

    我想在用户登录我的系统后控制访问 例如 administrator can add delete and give rights to employee employee fill forms only 因此 在知道用户拥有哪些权限后 检查
  • 如何使用log4j的同一个记录器将不同的信息写入两个不同的文件?

    我想使用我的记录器写入两个不同的文件 其声明如下 public static final Logger logger Logger getLogger Adapt class PropertyConfigurator configure l
  • 在 Ajax 调用中传递包含空格的值

    尝试在 ajax 调用中传递空格 我相信 word 与 word 的传递方式相同 另一方面 两个单词需要通过呼叫完全发送 第二个词 但不一样 第二个字 我应该在调用之前修剪还是在服务器端脚本上执行此操作 我怎样才能发送空格 我知道这是一个老
  • urllib2/requests 和 HTTP 相对路径

    如何强制 urllib2 requests 模块使用相对路径而不是完整 绝对 URL 当我使用 urllib2 requests 发送请求时 我在代理中看到它将其解析为 GET https xxxx path to something HT
  • 为什么我的应用程序没有输入 if 语句

    我正在尝试用 Java 编写一个控制台客户端 服务器应用程序 使用套接字 我目前有一个简单的登录系统和一个简单的命令系统 登录系统似乎可以正常工作 尽管它会向客户端打印 无效的用户名和密码 行 无论用户是否输入正确的凭据 连接肯定有效 然而
  • GAE 部署 Java8/Java7 错误

    我正在尝试通过 Intellij IDEA 将一个基本上空的项目部署到 GAE 我创建了一个新项目 在 appengine web xml 中设置我的项目 ID 并保留其他所有内容 我收到以下错误 并带有完整日志here java lang
  • 在满足条件后使用 mufa 停止 React 组件之间的通信

    我正在使用 sub pub 模式mufa在 React 组件之间而不是 props 之间进行通信 然后 我们将减轻父组件中的逻辑 正如您将在下面的代码片段中注意到的那样 const on fire mufa class Input exte