reactjs 在发布请求APIReact之后重新呈现组件

6bc51xsx  于 2023-02-08  发布在  React
关注(0)|答案(3)|浏览(115)

在一个post请求之后,数据进入数据库,但是它没有重新呈现组件。我需要手动按F5按钮,新的数据就会显示出来。看起来then没有执行。

class AddForm extends Component {
    constructor(props) {
        super(props)
        this.state = {
            id: null,
            title: "",
            price: 0,
            pages: 0,
        };
    }

    postData() {
        const { title, price, pages } = this.state
        const curTitle = title
        const curPrice = price
        const curPages = pages
        fetch("api/books", {
            method: "POST",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                Title: title,
                Price: price,
                NumberOfPages: pages
            })
        }).then(res => res.json()).then(() => this.setState({ title: curTitle, price: curPrice, pages: curPages }))
    }
}

编辑:执行以下操作时:

.then(response => response.json()).then(res => console.log(res))

我得到Uncaught (in promise) SyntaxError: Unexpected end of JSON input

mccptt67

mccptt671#

那么从你的问题来看,你可以在提交的时候进行状态更新,唯一的问题是关于显示数据,所以我建议你另外放一个显示数据的组件,以前我是这样做的,你能不能这样做告诉我。

mrwjdhj3

mrwjdhj32#

资源=〉资源json():这将给出一个JSON响应,将此JSON响应值绑定到setState中的状态。

希望您的回复如下,

response.data = {
   curTitle: 'some title',
   curPrice: 'some price',
   curPages: 'some pages'
}

改变你的fetch调用然后函数如下,

constructor(props) {
   super(props)
   this.state = {
      id: null,
      title: "",
      price: 0,
      pages: 0,
   };
   this.postData = this.postData.bind(this); // Add this line, cannot read property error will be gone.
}

fetch("api/books", {
    method: "POST",
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        Title: title,
        Price: price,
        NumberOfPages: pages
    })
}).then(res => res.json()).then((responseJson) => {
  console.log(responseJson); // what is the output of this?
  this.setState({
    title: responseJson.data.curTitle,
    price: responseJson.data.curPrice,
    pages: responseJson.data.curPages
  })
})
ilmyapht

ilmyapht3#

你应该创建一个从后端获取的新函数,然后在响应后调用这个函数

相关问题