为什么我的 this.props.data 在渲染函数之前的任何地方都未定义?

Why my this.props.data coming undefined anywhere before render function?

数据相应地从父级传递给子级,因此它显示在渲染函数内部,但我无法将其用于我需要在渲染之前 运行 的异步函数。

如果您看到 data.titledata.link 都显示在渲染函数下,但由于某种原因它们显示此错误:

× TypeError: Cannot read property 'link' of null

我还能做什么?

 export default class Highlight extends Component {

state = {
    htmlString: ''
}

 fetchActivity = () => {

    axios({
        method: 'post',
        url: 'api/singleactivity',
        data: { activityLink: "http://play.fisher-price.com" + this.props.data.link }
    })
        .then((res) => {
            this.setState({
                htmlString: res.data
            })
        })
        .catch((err) => {
            console.log('There was an error fetching data', err);
        })

}

componentDidMount() {
    this.fetchActivity()
}

 render() {

    if (this.props.visibility.highlight) {

        return (
            <div>
                <section className="card bg-info"
                    aria-label="Book Detail">
                    <div className="bg-secondary">
                        <h2>{this.props.data.title}</h2>
                        <h2>{this.props.data.link}</h2>
                        <h2>{this.props.data.imageLink}</h2>
                    </div>
                    <br />
                    <div className="row" dangerouslySetInnerHTML={{ __html: this.state.htmlString }}>
                    </div>
                    <br />
                    <div className="bg-warning">
                        {!this.props.visibility.favorites ?
                            <button onClick={() => this.addToFavorites()}> Favorite</button> :
                            <button onClick={() => this.removeFromFavorites()}> Remove</button>}
                    </div>
                </section>
                <br />
            </div>
        )
    } else {
        return null;
    }

}

您可以做的是:

{this.props.data ? this.props.data.title : ''}

{this.props.data ? this.props.data.link: ''}

好吧,混合获取调用和查看代码或分开使用 dangerouslySetInnerHTML,您的 prop this.props.data 并不总是有值,这是您问题的直接来源。

所以你肯定是这样使用你的组件的<Highlight data={stuff} ... />你可以把它改成类似{stuff ? <Highlight data={stuff} ... /> : null}这样如果输入数据不是准备好了。