类型“ Readonly <{}>”上不存在属性“ posts”

时间:2020-02-20 19:59:58

标签: reactjs typescript next.js

我正在将 Nextjs与Typescript一起使用。

我想使用Get请求获取帖子。我的代码这一行出现错误:

render() {
const {posts}= this.state

错误消息是:

“ Readonly <{}>”类型上不存在属性“帖子”。

这是我的代码:

import React, { Component } from 'react';
import axios from 'axios';

interface AbcState {
  posts: any[];
}

export class PostL extends Component<AbcState>{

  constructor(props) {
    super(props)
    this.state = {
      posts: []
    }
  }

  componentDidMount() {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(response => {
        console.log(response)
        this.setState({ posts: response.data })
      })
      .catch(error => {
        console.log(error)
        this.setState({ errorMsg: 'Error retrieving data' })
      })

  }

  render() {
    const { posts } = this.state
    return (
      <div>
        List of Posts
                    {
          posts.length ?
            posts.map(post => <div key={post.id}>{post.title}</div>) : null
        }
      </div>
    )
  }
}

export default PostL

2 个答案:

答案 0 :(得分:2)

如果您希望组件在状态中具有价值,则需要像这样定义它。

一般示例:

interface MyProps {
  ...
}

interface MyState {
  value: string
}

class App extends React.Component<MyProps, MyState> {
  ...
}

答案 1 :(得分:1)

尝试这样:

export class PostL extends Component<any, any>

然后将道具和状态约束为实际形状。