我有一个带有许多子元素的React(15.5.4)组件,其中一些是HTML元素,另一些是其他React组件。
我正在使用服务器渲染,并且在服务器和客户端上需要相同的行为。客户将使用React的生产版本。
我需要遍历子级并确定一种特定类型的React组件。所以我首先想到的是迭代使用React.Children.forEach()
并寻找组件名称。
React.Children.forEach(this.props.children, child => {
console.log('name =', child.name)
})
似乎child.name
并且child.displayName
不存在。
现在,child.type
存在,它可以是一个字符串(对于HTML元素),也可以是"ul"
一个函数(对于React组件)。
当它是一个函数时,我可以lodash/get
像这样使用const type = get(child, 'type.name', '')
以获取组件名称。 但是
,这似乎只能在服务器上运行,而不能在客户端生产版本(返回字符串:)中使用"t"
。看起来开发版本使用我的组件名称作为该功能,但是生产版本将其重命名为t()
。所以我不能使用child.type.name
。
我如何:
您可以在属性中设置组件的名称displayName
。如果您使用的是ES6类,则可以设置一个称为displayName
component的类的静态属性。然后,您将可以通过获得子名称child.type.displayName
。
const FirstChild = ({ name }) => <li>{name}</li>;
FirstChild.displayName = 'FirstChild';
const SecondChild = ({ name }) => <li>{name}</li>;
SecondChild.displayName = 'SecondChild';
class ThirdChild extends React.Component {
static displayName = 'ThirdChild';
render() {
return (
<li>{this.props.name}</li>
);
}
}
class Parent extends React.Component {
componentDidMount() {
React.Children.forEach(this.props.children, child => {
console.log('name =', child.type.displayName);
})
}
render() {
return (
<ul>{this.props.children}</ul>
);
}
}
class App extends React.Component {
render() {
return (
<Parent>
<FirstChild name='1st child value' />
<SecondChild name='2nd child value' />
<ThirdChild name='3rd child value' />
</Parent>
);
}
}
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>
<div id="app"></div>
问题内容: 我正在开发一个React应用程序。我有一个Loading组件,这是一个等待动画的动画。我想根据调用它的组件在此Loading组件中添加一条消息。 这是我如何调用我的Loading组件(this.state.displayLoading为true或false): 我想在我的变量loadingFrom中获取“ LoginForm”,它是className。也许这不是正确的方法。 问题答案:
问题内容: 我正在使用JSBin上的ReactJS框架。 我注意到,如果我的组件名称以小写字母开头,那么它将不起作用。 例如,以下内容不呈现: 但是,一旦我替换为,它就会渲染。 我不能以小写字母开头的标签有原因吗? 问题答案: 在JSX中,小写标签名称被认为是HTML标签。但是,带点号(属性访问器)的小写标记名称不是。 参见HTML标签与React组件。 编译为(html标记) 编译为 编译为
我正在JSBin上玩ReactJS框架。 我注意到,如果我的组件名称以小写字母开头,它就不起作用。 例如,以下内容不会呈现: 但只要我用替换它就会呈现。 我不能用小字母开始标签有什么原因吗?
问题内容: 如果我有这样的课程: 有没有办法知道使用名为类型的参数? 问题答案: 总结一下: 如果编译期间包含调试信息,则可以获取参数名称。查看此答案以获取更多详细信息 否则得到的参数名称是不是有可能 使用可以获取参数类型 为了编写编辑器的自动完成功能(如你在评论之一中所述),有几个选项: 使用,,等。 使用,等。 结合使用以上内容-前者用于非基本类型,而后者用于基本类型。 根本不显示参数名称-仅
我是ReactJS的新手,我在ES2015的基础上学习它。大多数例子是ES5。我的问题似乎是渲染子组件。 我的子组件是一个文本字段 我的父组件称为AddressBox,将包含许多子控件。如果displayMode为true,则它应该呈现一个范围,如果为false,则它应该呈现一个表单控件。 地址框代码为: 当我尝试渲染这些控件时,会出现以下错误: 警告:作出反应。createElement:类型不
问题内容: 是否有可能做到这一点: 我的堆栈中有Dojo和jQuery框架,因此,如果这两个框架都使它变得更容易,它们将可用。 问题答案: 在ES5及更高版本中,无法访问该信息。 在旧版JS中,您可以使用来获得它。 但是,您可能必须解析名称,因为它可能包括一些额外的垃圾。不过,在某些实现中,您可以使用来简单地获取名称。 解析: