小编Fel*_*tos的帖子

React 和 Typescript 接口“OR”运算符

我开始使用 React 和 Typescript 开发一个应用程序。顺便说一句,我是这两件事的新手。

我有一个反应组件和一些接口,我希望该接口中的每个字段都是必需的,但如果实现了一个特定字段,则不再需要其他字段。

在这种情况下,如果我设置“对象”,我希望不需要实现其他 2 个字段。

interface ITextFieldProps {
    label: string,
    required: boolean,
    object?: any
}

export default class TextField extends React.Component<ITextFieldProps, any> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

希望有人帮忙,加油!

编辑

首先我要感谢所有的答案,我真的从他们每个人身上学到了很多东西。他们帮助我了解我的问题并找到最佳解决方案。

我将传递的对象是元数据,因此它仅在 http 调用后在运行时可用。话虽这么说,无论如何我都无法在开发时检查并输入它。

所以我使用反应道具传播解决了我的问题。

(今天打字稿还不支持,但总有一天会的嘿嘿https://github.com/Microsoft/TypeScript/issues/2103):

export interface IMetadata {
    label: string,
    required: boolean
}

interface TextFieldProps extends IMetadata {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以传递一个带有 props spread 的对象,然后当我调用 label="" 时,它会自动覆盖 {...this.metadata.nome} 中的标签:

<TextField {...this.metadata.nome} label="OverwriteLabel" />
Run Code Online (Sandbox Code Playgroud)

编辑2

正如 Daniel 所说:不幸的是,JSX 中的类型检查有一个错误,请参阅:

https://github.com/Microsoft/TypeScript/issues/10171

他们计划在 2.1 版本中修复它。在此之前,该技术将不适用于 TSX。(修复后,我会回来更新这个答案。)

interface typescript reactjs

9
推荐指数
2
解决办法
2万
查看次数

React propTypes错误未显示

我在使用React propTyoes时遇到问题。正如您在下面的代码中看到的那样,我创建了一个需要2个道具才能工作的组件。

当我在App文件中使用该组件时,仅传递了1个属性,而没有“ stateSidebarVisible”,它不会抛出任何错误/警告反应...(我阅读了很多有关NODE_ENV生产/开发的信息,在我的节点中搜索process.env,但没有找到NODE_ENV变量)。有什么线索吗?

FFMainHeader

export default class FFMainHeader extends React.Component {
  render() {...}
}

FFMainHeader.propTypes = {
  stateSidebarVisible: React.PropTypes.bool.isRequired,
  handleSidebarChange: React.PropTypes.func.isRequired
};
Run Code Online (Sandbox Code Playgroud)

应用程式

这是我所谓的FFMainHeader组件。

export default class FFMainApp extends React.Component {
    .......
    render() {
        return (
            <div id="FFMainApp">
                <FFMainHeader
                    handleSidebarChange={this.onSidebarChange} />
                <FFMainSidebar />
            </div>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

export default class FFMainHeader extends React.Component {

  constructor(props) {
    super(props);
    this.clickSidebarChange = this.clickSidebarChange.bind(this);
  }

  clickSidebarChange(e) {
    e.preventDefault();
    (this.props.stateSidebarVisible) ?
      this.props.stateSidebarVisible = false :
      this.props.stateSidebarVisible = true;
    this.props.handleSidebarChange(this.props.stateSidebarVisible);
  }

  render() …
Run Code Online (Sandbox Code Playgroud)

reactjs react-proptypes

5
推荐指数
0
解决办法
1189
查看次数

标签 统计

reactjs ×2

interface ×1

react-proptypes ×1

typescript ×1