React组件缺少道具元素

时间:2017-07-20 02:06:24

标签: asp.net reactjs typescript react-redux

我正在尝试为我的应用程序添加一个智能组件,并且打字稿不断地因为我没有添加足够的道具而大喊大叫。下面是我要添加的代码:我从带有react redux的asp.net核心spa应用程序开始,并且一直在尝试从那里构建。

<Layout>
    <Route exact path='/' component={ Home } />
    <Route path='/counter' component={ Counter } />
    <Route path='/fetchdata/:startDateIndex?' component={ FetchData } />
</Layout>;

type LayoutProps = LayoutState.LayoutState
    & typeof LayoutState.actionCreators;


class Layout extends React.Component<LayoutProps, {}> {
    componentWillMount() {
        this.props.requestNavigationLinks();
    }

    public render() {
        return <Grid fluid>
            <Row>
                <Col sm={3}>
                    <NavMenu links={this.props.links}/>
                </Col>
                <Col sm={9}>
                    {this.props.children}
                </Col>
            </Row>
        </Grid>;
    }
}

export default connect(
    (state: ApplicationState) => state.layout,
    LayoutState.actionCreators
)(Layout) as typeof Layout;

export interface LayoutState {
    isLoading: boolean;
    links: string[];
}

我遇到的问题是打字稿是抱怨标签缺少属性被分配给它的道具。 connect语句不会自动处理吗?

我确信这很容易,我很遗憾,感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

它与出口线有关。我从aspnet-spa示例中获取了它:

export default connect(
    (state: ApplicationState) => state.layout,
    LayoutState.actionCreators
)(Layout) as typeof Layout;

由于as typeof Layout;措词,该组件期望我明确传递所有这些变量。删除它解决了我的问题。

答案 1 :(得分:0)

我不认为requestNavigationLinks是LayoutState中已定义的属性。您可以尝试将其添加到界面中。

例如:

export interface LayoutState {
    isLoading: boolean;
    links: string[];
    requestNavigationLinks: func;
}