我正在构建一个REACT
应用程序(使用TypeScript),我面临一个问题,该解决方案需要识别不同的REACT
子组件的可能性。基本上是这样的:
const RibbonTab: ReactFC<IRibbonTab> = (props) => {
return <p>{props.header}</p>
}
const Ribbon: ReactFC<IRibbon> = (props) => {
const ribbonTabs = props.children.ofType<RibbonTab>(); // This is what I'd like to accomplish.
return <>props.children</>;
}
我已经搜索了一段时间,许多,如果不是所有接受的答案(像这里:只允许反应组件中特定类型的子级),都是使用type.displayName
(this.props.children[子级]。type.display名称
)。不幸的是,也有人说displayName
在生产中可能会缩小,所以我不能依赖它。
我发现的唯一方法是“强制”一个自己的显示名称。基本上,我创建了一个接口IUniqueComponent
,然后为每个应该可以识别的组件扩展它。大概是这样的:
interface IUniqueComponent {
displayNameForIdentification: string;
}
const RibbonTab: ReactFC<IRibbonTab extends IUniqueComponent> = (props) => { ... }
RibbonTab.defaultProps = { displayNameForIdentification: "RibbonTab" }
然后,使用React。儿童对于每个
,我可以筛选子项:
React.Children.forEach(props.children, (c) => {
if (React.isValidElement(c)) {
if (c.props.displayNameForIdentification === 'WHAT I WANT') { ... }
}
})
我不喜欢这个解决方案的事实是,我自己添加了标识符,甚至道具名称,displayNameFor鉴定
,也没有被React保存在安全的地方,但它只是一个道具:我不确定开发人员是否覆盖了该道具(好吧,我可以说“永远不要使用displayNameFor标识
PROPS”,但我想避免这样做)。
那么,有没有办法识别REACT
子组件的类型?
编辑:按照拉梅什的建议,我可以写这样的东西:
React.Children.forEach(props.children, (c) => {
if (React.isValidElement(c)) {
if (c.type.name === 'WHAT I WANT') { ... }
}
})
但是,TypeScript不喜欢c.type。name
,它给了我以下错误,我无法解决它:
类型“string |”(props:any)上不存在属性“name”)=
对这个新人有什么建议吗?
您可以这样做:
{children
和组成部分:
const Tab = (props) => {...}
Tab.displayName = "Tab"
这只是我的示例,它只呈现名称为“Tab”的组件
使用类型。name
这将返回函数的名称
import * as React from "react";
import { render } from "react-dom";
class App extends React.Component<{}> {
public render() {
return (
<div>
</div>
);
}
}
const app = <App/>
console.log(app.type.name==="App")
render(app, document.getElementById("root"));
问题内容: 在带有钩子的React中,更新状态的正确方法是嵌套对象是什么? 一个人怎么会使用到的更新来(附加一个字段)? (改变价值)? 问题答案: 您可以像这样传递新值
使用React钩子(如)的、和生命周期钩子的等价物是什么?
问题内容: 随着React 中钩子的引入,现在的主要困惑是何时将函数组件与钩子和类组件一起使用,因为在钩子的帮助下,甚至可以在函数组件中获得和部分使用。所以,我有以下问题 钩子的真正优点是什么? 何时使用带有钩子的函数组件和类组件? 例如,带有钩子的功能组件不能像类组件那样帮助性能。他们没有执行就不能跳过重新渲染。还有其他原因吗? 提前致谢。 问题答案: 引入和其他特性(例如和)的思想是帮助减少必
我正在尝试新的hooks功能,并坚持认为我的状态没有更新。 实际上,状态已更新(我可以在console.log中看到更新的值,并且我的组件会重新运行useEffect),但是useEffect方法使用我的旧状态,并仅将签名保存给第一个用户,而活动用户在状态中确实发生了更改。 我想过添加useCallback,并将我的方法移动到use效果或组件本身,但我可以设法让它工作。 状态: 这是我的效果: 这
在我看来,React-Hooks-useState非常适合模式选择使用props中的值或使用自己的状态,但是当我有条件地使用hook时,lint显示了一些错误。 工作示例 我尝试使用钩子,条件如下,但是使用eslint error