我是新来的,对一些事情有点困惑。我在网上读了许多文章,声称组件不能改变自己的道具,但是父组件可以改变其子组件的道具。然而,我没有看到任何真正展示如何做到这一点的东西。
我希望能够做到这一点:
class Parent extends Component {
constructor(props) {
super(props);
this.childProps = {name:'name',age:12,type:'child'};
this.changeChild = this.changeChild.bind(this);
}
changeChildName(newName) {
//change prop 'name' of child here;
}
render() {
return (
<Child {...this.childProps} />
);
}
}
然而,我根本不知道如何做到这一点——尽管我在React上读到的几乎所有材料都说父母可以改变孩子的道具。我能正常工作的如下:
class Parent extends Component {
constructor(props) {
super(props);
this.state = {name:'name',age:12,type:'child'};
this.changeChild = this.changeChild.bind(this);
}
changeChildName(newName) {
this.setState({name: newName});
}
render() {
return (
<Child {...this.state} />
);
}
}
当我只想重新渲染子视图时,父视图需要重新渲染,这对我来说似乎有点过分了。如何更改<代码>的道具
次要问题
1)有没有可能在不重新渲染组件的情况下改变组件的状态?
2) 是否存在我们可以点击的onStateChange
类型事件,或者我们是否只有组件将接收props
?
我想你误解了。这是非常简单的家长改变孩子的道具。。。只需更改渲染的道具。现在,如果我们想在不重新命名父对象的情况下对子对象进行一些更改,该怎么办。这也很简单。
为您的孩子附加一个ref并使用它。现在,孩子不能改变自己的道具,所以你在孩子身上弄乱的任何东西都不会是道具。每次父级重新渲染时,都会从父级传递道具。
所以
class Parent extends Component {
constructor(props) {
super(props);
this.childProps = {name:'name',age:12,type:'child'};
}
doSomethingOnChild() {
this.refs.child.callFunctionOfChildThatWillMessWithItself();
}
render() {
return (
<Child {...this.childProps} ref="child" />
);
}
}
1)有没有可能在不重新渲染组件的情况下改变组件的状态?
不,这没有什么意义。
2)是否有onStateChange类型的事件,我们可以利用,还是我们只有组件WillReceiveProps?
没有,请使用组件将接收道具
。
当我只想重新渲染子视图时,父视图需要重新渲染,这对我来说似乎有点过分了。
实际上,这就是你欺骗自己的地方:父对象发生了变化,因为它返回的内容发生了变化。正在从根重新渲染整个树。
我对JS的反应有点陌生。我有两个问题。我来了 现在我要做的是,当应用程序组件挂载时,我生成一个对后端服务器的ajax调用,当它返回时,它更新道具,并设置状态,这样子组件也会重新呈现,但子组件不会重新呈现。谁能告诉我出了什么问题。 问题2 现在让我们假设我将进入组件二路由,它将呈现组件二,我在应用程序组件中生成一个ajax调用,根据ajax调用返回的数据,我在应用程序组件中设置了一些道具,我还希望组
这个问题在这里已经得到了回答,但事情总是在变化。 基本上,父组件获取一些数据,子组件需要这些数据。 这是子组件。
我有两个组件:父组件,我想改变子组件的状态: 和子组件: 我需要从父组件更改子组件的打开状态,或者当单击父组件中的按钮时,从父组件调用子组件的toggleMenu()?
我有以下结构: ChildComponent只是呈现值:
问题内容: 我在代码中使用了PrimeFaces 标记。我们如何在更新父组件的ajax调用中排除子组件的更新? 问题答案: 如果您至少使用PrimeFaces 3.3,则可以为此使用PrimeFaces选择器。这允许您在PrimeFaces ajax组件中使用jQuery CSS选择器语法 和属性。 例如: 此示例将更新整个表单,除了客户端具有的输入。 如果要更新某个组件的所有子组件(除了一个),
我在代码中使用了PrimeFaces标记。如何在更新父组件的ajax调用中排除子组件的更新?