网站搜索

reactjs - 在 React、Typescript 中获取查询参数


我有一个看起来像这样的组件:

class MyView extends React.Component<{}, {}> {
    render() {
        console.log((this.props as any).params); // prints empty object
        return (
            <div>Sample</div>
        );
    }
}

我想打印 URL 查询参数,但得到的是一个空对象。(是的,我知道我将 {} 声明为 Props,但如果我不定义它,编译就无法通过)。

有没有办法将一个“默认”的 props 对象传递给我的组件,以便我可以访问 this.props.params?或者在 TypeScript 中应该以不同的方式完成?

答案#1

你需要为 props 和 state 定义类型,然后将它们放在 {} 位置。
目前不清楚你想从哪里获取“URL 查询参数”,所以我将直接从 window.location 对象中获取它们:

interface MyViewProperties {
    params: string;
}

interface MyViewState {}

class MyView extends React.Component<MyViewProperties, MyViewState> {
    render() {
        console.log(this.props.params); // should print "param1=value1&param2=value2...."
        return (
            <div>Sample</div>
        );
    }
}

ReactDOM.render(<MyView props={ window.location.search.substring(1) } />, document.getElementById("container"));

答案#2

要为组件分配默认属性,您应使用 defaultProps:

class MyView extends React.Component<{}, {}> {
    render() {
        console.log((this.props as any).params); // prints empty object
        return (
            <div>Sample</div>
        );
    }
}

MyView.propTypes = {
  url: React.PropTypes.string
}

MyView.defaultProps = {
  url: ''
}

请查看官方文档以获取更多信息。