React(Meteor)中的子组件未触发事件
Child Component in React (Meteor) not firing events
各位。我是一个相对较新的Meteor开发人员,在学习了Blaze之后,我决定开始学习React,因为这似乎是正确的做法,我有点喜欢它的工作原理。
无论如何,我正在处理的一些代码有问题,可以使用一些指导。。。我有以下代码段:
https://gist.github.com/czbaker/2101526219eea5330553
出于某种原因,当组件中的表单被提交时,它并没有启动用于处理提交的函数。相反,它会刷新页面(因为event.preventDefault()
从未发生过)。
是什么导致了这种情况的发生?根据IRC上的建议,我尝试用以下内容替换onSubmit={this.handleSubmit}
:
onSubmit={()=>{this.handleSubmit}}
onSubmit={this.handleSubmit()}
它们都没有任何效果,表单提交函数仍然没有被调用。我真的很困惑,因为我大部分时间都遵循了文档,看起来它应该是有效的。
由于我是React的新手,我确信我忽略了一些东西,但不知道是什么。有人能帮我一下吗?提前感谢!
当前项目也在BitBucket存储库中,供有需要的人使用https://bitbucket.org/czbaker/karuto/
到目前为止,我所能想到的是,如果我使用ReactLayout单独渲染有问题的组件(而不是作为另一个组件的子组件),它会很好地工作,但当我第二次尝试将其渲染为子组件时(按照MDG的Todos教程(React版本)中所示的方式进行),事件会拒绝启动,但没有错误。
提前感谢您的帮助。
问题是您试图使用React呈现整个HTML树。
如果您使用flow-router
和react-layout
,您可以简单地呈现您想要的文档片段,它将被放置在指定的根节点中,该根节点的id为'react-root'
。
否则,如果您不需要blaze并为React:创建根元素,我建议使用静态html
some_file.html:
<body>
<div id="react-container"></div>
</body>
然后使用首选路由器将根组件渲染到其中。
然后,通过ReactiveVar
或一些其他方法动态地改变title
。
我正在使用React和React Router,以及谷歌的MDL,并遇到了同样的问题(以及其他一些问题,例如导航到不同的路线会导致整个页面重新加载)。
在试图查找原因时,我发现从父组件中{this.props.children}
周围的div中删除MDL类会导致事件侦听器正确启动。
经过调查,这似乎是由于MDL构造DOM节点的方式造成的,并且可以通过在每个子组件的componentDidUpdate()
方法中调用componentHandler.upgradeDOM()
来解决,如下所示:
App = React.createClass({
render() {
return(
<div className="mdl-layout mdl-js-layout">
...
<div className="mdl-layout__content">
{ this.props.children }
</div>
</div>
);
}
});
ChildComponent = React.createClass({
handleClick() {
alert("I've been clicked!");
},
render() {
return(
<div>
<button onClick={this.handleClick}
className="mdl-button mdl-js-button">Click Me</button>
</div>
);
},
componentDidUpdate() {
componentHandler.upgradeDOM();
},
});
如这里概述的,http://quaintous.com/2015/07/09/react-components-with-mdl/;或者使用"匹配"版本的MDL,如此处所示:https://github.com/tleunen/react-mdl
我知道这与OP的问题有点不同,但我想我会在这里添加这一点,希望它能帮助其他人解决这个问题。:)
在我的Layout.jsx中,我更改了
export default class extends React.Component {
render() {
return(
<body>
...some jsx
</body>
);
}
}
至
export default class extends React.Component {
render() {
return(
<div>
...some jsx
</div>
);
}
}
这很有帮助,现在React事件运行良好
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 单元测试:使用酶模拟父组件中子组件的点击事件
- React/flux - 子组件用户事件 - 是否应通过调度程序路由所有内容
- React:如何侦听子组件事件
- 将事件绑定到其他UI组件's函数,在Kendo MVVM中
- 如何更新angular2中组件之间的事件数据
- 点击tpl链接时,ExtJS 4.2自定义组件触发事件
- 反应:在嵌套组件上冒泡点击事件
- 如何根据其他组件中的事件更新组件URL
- 使用Ember中的组件生命周期事件
- 如何将事件绑定到模式对话框上的组件
- 将事件处理程序推送到父组件
- React,在组件事件上呈现消息的最佳方法
- 如何确定Twitter引导组件事件的来源
- 取消ExtJS组件事件
- Ember:嵌套组件事件冒泡
- 获取飞行组件事件的委托目标
- EmberJS嵌套组件事件
- Angular js文本Angular组件事件上键
- ExtJS“创建”或“初始化”组件事件侦听器