我正在尝试将Bootstrap包装到具有集成表单验证的组件中。
简短:假设我有
<Form>
<FieldGroup>
<Field rules={'required'}/>
</FieldGroup>
</Form>
一旦Field
pases验证,我怎么能通知FieldGroup
(父节点)来添加一个类?
我在这里创建了一个简化的Codepen版本
我想根据验证状态,然后更改FieldGroup的状态,以便可以正确更改类名。(添加has-warning
has- danger
等),并最终将类添加到Form组件。
您需要将a传递callback
给子组件。我只是分叉了您的Codepen,并添加了以下代码段。
http://codepen.io/andretw/pen/xRENee
这是主要概念, 在 “父” 组件中创建 一个回调函数, 并将其传递给 “子” 组件
即子组件需要一个额外的道具来获取回调:
<Form>
<FieldGroup>
<Field rules={'required'} cb={yourCallbackFunc}/>
</FieldGroup>
</Form>
在<FieldGroup />
(父母):
class FieldGroup extends React.Component{
constructor(props){
super(props);
this.state = {
color: 'blue'
}
}
cb (msg) {
console.log('doing things here', msg)
}
render() {
const childrenWithProps = React.Children.map(this.props.children,
child => React.cloneElement(child, {
cb: this.cb
})
)
return (
<div class='fields-group'>
<label> field </label>
{ childrenWithProps }
</div>
);
}
};
在<Field />
(孩子):
class Field extends React.Component{
constructor(props){
super(props);
this.state = {
empty: true
}
this.validate = this.validate.bind(this);
}
validate(e){
let val = e.target.value;
console.log(!val);
this.setState({empty: !val});
//here to notify parent to add a color style!
// do call back here or you may no need to return.
this.props.cb(val)
return !val;
}
render() {
return (
<div>
<input type='text' onBlur ={(event) => this.validate(event)}/>
{this.state.empty && 'empty'}
</div>
);
}
};
您可以在回调函数中执行所需的操作。(您还可以从回调传递<Form />
给孙子并使它工作,但是您需要重新考虑它的设计是好是坏。)
我正在尝试像Android文档解释的那样从通知启动活动,但是当我打开通知然后按后退按钮时,Homeactive(父)不会打开,而是应用程序关闭。我做错了什么?
问题内容: 我的结构如下所示: 组件3应该根据组件5的状态显示一些数据。由于道具是不可变的,我不能简单地将其状态保存在组件1中并转发它,对吗?是的,我已经阅读了有关redux的内容,但不想使用它。我希望有可能通过反应来解决。我错了吗? 问题答案: 对于孩子与父母的通信,您应该传递一个将状态从父母设置为孩子的函数,如下所示 这样,孩子可以通过调用通过props传递的函数来更新父母的状态。 但是您将不
我刚刚开始使用ReactJs开发,并一直遵循serverless-stack.com教程。我已经准备好扩展应用程序并创建一个模板,带有n个子组件,但是在管理孙子组件之间的用户会话时遇到了麻烦。 我有管理用户会话的App.js。但是我在孙子组件中有我的注销按钮,我无法让它调用App.js signOut()函数。 App.js 我的布局组件有一系列不同的组件,如页眉、页脚、导航等。。 最后,我的Na
我已使用zo0r/React本机推送通知在我的React本机应用程序上设置推送通知。它可以在Android系统上运行,当应用程序处于后台模式时,也可以在iOS上运行。 但是,当应用程序在iOS的前台模式下时,不会显示通知。我知道我必须在前台模式下处理通知,但我希望它们的显示方式与在后台模式下的显示方式完全相同。 所以我做了以下几件事: 但是什么都没发生,通知还是没有显示,我到底错过了什么?
问题内容: 如何获得Python类的父类? 问题答案: 使用以下属性: 从文档: 类对象的基类的元组。 例: 另一个例子: