首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-react不能正确地获取数据

django-react不能正确地获取数据
EN

Stack Overflow用户
提问于 2021-07-11 11:42:36
回答 1查看 55关注 0票数 0

models.py

代码语言:javascript
复制
class Book(models.Model):
    name = models.CharField(max_length=100, unique=True)
    author = models.CharField(max_length=64)
    passcode = models.CharField(max_length=80)

serializers.py

代码语言:javascript
复制
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Book
        fields = '__all__'

views.py

代码语言:javascript
复制
class GetBooks(APIView):
    def get(self, request):
        books = models.Book.objects.all()
        data = serializers.BookSerializer(books, many=True).data
        return Response(data, status=status.HTTP_200_OK)

urls.py

代码语言:javascript
复制
urlpatterns = [
    path('get-books', views.GetBooks.as_view(), name='get-books')
]

Main.js

代码语言:javascript
复制
import React, { Component } from 'react'

export default class Main extends Component {
    constructor(props){
        super(props)

        this.state = {
            books: ''
        }
        
        this.getBooks()
    }

    getBooks() {
        fetch('http://127.0.0.1:8000/api/get-books') // go down to see the data
            .then((response) => {
                const books = response.json()
                console.log(books) // go down to see the output <---- !!
                this.setState({
                    books: books
                })
            })
            
    }

    render() {
        return (
            <div>
               // for book in books show book.name, book.author ...
            </div>
        )
    }
}

从(http://localhost/api/get-books)获取的书籍数据

代码语言:javascript
复制
[
    {
        "id": 1,
        "name": "book1",
        "author": "author1",
        "passcode": "123"
    },
    {
        "id": 2,
        "name": "book2",
        "author": "auhthor2",
        "passcode": "123"
    }
]

console.log(data)

代码语言:javascript
复制
Promise { <state>: "pending" }
​
<state>: "fulfilled"
​
<value>: Array [ {…}, {…} ]
​​
0: Object { id: 1, name: "book1", author: "author1", … }
​​
1: Object { id: 2, name: "book2", author: "author2", … }
​​
length: 2
​​
<prototype>: Array []

我想遍历所有的书籍并显示给用户,获取的数据作为数组返回,但是我不能从this.state.books访问它(我最近开始使用react和django,所以请宽恕.)

EN

回答 1

Stack Overflow用户

发布于 2021-07-11 14:25:09

我找到了一个解决方案

Main.js

代码语言:javascript
复制
import axios from 'axios'
import React, { Component } from 'react'
import Books from './Books'

export default class Main extends Component {
    constructor(props){
        super(props)

        this.state = {
            books: []
        }
    }

    componentDidMount() {
        axios.get('http://localhost:8000/api/get-books')
            .then(res => {
                this.setState({
                    books: res.data
                })
            })
            
    }


    render() {
        return (
            <div>
                <Books books={this.state.books} />
            </div>
        )
    }
}

Books.js

代码语言:javascript
复制
import React from 'react'

const Books = ({books}) => {
    return (
        <div>
            {books.map(book => (
                <div> 
                    <h1>{book.name}</h1>
                    <small>{book.author}</small>
                </div>
            ))}
        </div>
    )
}

export default Books

--我只使用axios,将数据放入数组并发送给Book.js,然后使用.map()迭代它们!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68335867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档