我有3个组件:
、
和
。
组件负责呈现
,但其方式不同。
的render函数在运行时之前静态声明
,如下所示:
<StaticParent>
<Child />
</StaticParent>
而
则处理在运行时动态接收和呈现
,如下所示:
<DynamicParent>
{ this.props.children }
</DynamicParent>
和
都具有onclick
侦听器,以便在单击时更改其状态和重写器。我注意到,当单击
时,它和
都将被重新呈现。但是当我单击
时,将只重新呈现父级,而不是
。
是一个没有ShouldComponentUpdate()
的功能组件,所以我不明白为什么它不能重播。有人能解释一下为什么会这样吗?我在与这个用例相关的文档中找不到任何东西。
我将发布上下文的实际代码:
class Application extends React.Component {
render() {
return (
<div>
{/*
Clicking this component only logs
the parents render function
*/}
<DynamicParent>
<Child />
</DynamicParent>
{/*
Clicking this component logs both the
parents and child render functions
*/}
<StaticParent />
</div>
);
}
}
class DynamicParent extends React.Component {
state = { x: false };
render() {
console.log("DynamicParent");
return (
<div onClick={() => this.setState({ x: !this.state.x })}>
{this.props.children}
</div>
);
}
}
class StaticParent extends React.Component {
state = { x: false };
render() {
console.log("StaticParent");
return (
<div onClick={() => this.setState({ x: !this.state.x })}>
<Child />
</div>
);
}
}
function Child(props) {
console.log("child");
return <div>Child Texts</div>;
}
在应用程序呈现中编写此代码时:
<StaticParent />
呈现的是这样的:
<div onClick={() => this.setState({ x: !this.state.x })}>
<Child />
</div>
function StaticParent(props) {
return React.createElement(
"div",
{ onClick: () => this.setState({ x: !this.state.x }) },
React.createElement(Child, null)
);
}
React.createElement(StaticParent, null);
<DynamicParent>
<Child />
</DynamicParent>
function DynamicParent(props) {
return React.createElement(
"div",
{
onClick: () => this.setState({ x: !this.state.x }),
children: props.children
}
);
}
React.createElement(
DynamicParent,
{ children: React.createElement(Child, null) },
);
这是两种情况下的孩子:
function Child(props) {
return React.createElement("div", props, "Child Text");
}
这是什么意思?那么,在StaticParent组件中,每次调用StaticParent的render方法时都调用react.createElement(Child,null)
。在DynamicParent案例中,子级只创建一次并作为道具传递。由于react.createElement
是一个纯函数,因此可能会将其存储在某个地方以提高性能。
在DynamicParent案例中,使Child的呈现再次运行的是Child道具的更改。例如,如果父级的状态被用作子级的道具,那么在这两种情况下都将触发重新呈现。
我已经创建了一个按钮和文本组件,并将它们包含在搜索组件中。现在,我想用搜索组件的处理程序覆盖按钮的默认handleClick事件。但this.handleClick指向按钮组件的事件处理程序。。请帮忙。。我需要从搜索中单击,而不是从按钮中获取。。
所以我正在重写一个带有钩子的组件,我遇到了一个有趣的挑战,我需要用钩子模仿的一些旧行为。 我的旧代码如下所示: 你看,我正在基于nextrops启动一个,然后在语句中,我基于该nextVal进行了一些检查,现在,我知道我们可以为指定第二个参数,以便仅在道具更改时运行它,但是这些检查呢,如何实现类似于?
我对react还比较陌生,我一直在分解一个web应用程序,并用react组件替换部分。我现在正在开发一个组件,其中包含我创建的几个不同组件。 在新组件中,我在componentDidMount函数中进行API调用,并创建子组件。乍一看,一切看起来都很完美,但当我们在其中一个子组件中进行状态更改,然后在父组件中进行更改时,子组件将其状态重置为更改之前的状态。 我知道发生了什么,州政府没有被传递给家长
诉求:react父组件某些值改变后,需要让子组件同步更新,但是这个过程不能让父组件重新渲染 请帮忙罗列下所有可能的方式
我在React路由器2.2.1中使用React 15.0.1。我将应用程序用作父组件,它呈现从路由器处理程序传递的子组件。 这是我的导航栏组件。 这些是我的路线处理程序。当用户在路由上着陆时,将对其进行身份验证检查。如果身份验证失败,它们将被重定向到登录路径。 当应用程序组件第一次挂载导航栏和子组件时,它会检查身份验证并相应地添加到导航栏的链接。成功登录后,当用户从登录路由重定向到索引路由时,子组
我试过这种模式。 据我所知,最初的组件呈现是由props更改触发的,而由于setState是异步的(出于某种原因),带有新状态更新的呈现不是在第一次传递时完成的。 然而,我不明白的是,为什么当它最终决定更新状态时,它没有重新发布组件。我以为由setState引起的状态变化总是会触发一个rerender。 所以最后,我有一个组件,它在状态实际改变之前无用地重新呈现,然后什么都不做,当/如果(?)状态