gpt4 book ai didi

javascript - react 状态不更新/增量的问题

转载 作者:行者123 更新时间:2023-11-28 04:23:07 26 4
gpt4 key购买 nike

我试图通过单击一些调用方法来增加状态值的文本来进行分页。然后状态值被传递到 axios 调用,然后该调用应该调用下一页。然而,我注意到,虽然状态从渲染函数在 console.log 中增加,但 axios 调用不会使用新的状态值再次调用。有人知道我该如何解决这个问题吗?

constructor(props) {
super(props);
this.state = {
people: [],
planets: [],
page: 1
};
this.pageIncrementer = this.pageIncrementer.bind(this);
}

componentWillMount() {
let page = this.state.page;
axios({
method: 'GET',
url: `http://localhost:3008/people?_page=${page}&_limit=10`
}).then((response) => {
this.setState({
people: response
});
}).catch((error) => {
console.log('There is an error in the Card axios call for people: ', error);
})
axios({
method: 'GET',
url: `http://localhost:3008/planets?_page=${page}&_limit=10`
}).then((response) => {
this.setState({
planets: response
});
}).catch((error) => {
console.log('There is an error in the Card axios call for planets: ', error);
})
}

pageIncrementer() {
this.setState({
page: this.state.page + 1
});
}

最佳答案

componentWillMount 仅调用一次,需要 componentDidUpdate https://facebook.github.io/react/docs/react-component.html#componentdidupdate

let getData = () => Math.random();

class Example extends React.Component{
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this)
this.state = {
name: ''
};
}

componentWillMount(){
console.log('componentWillMount')
}

componentDidUpdate(){
console.log('componentDidUpdate')
}

handleChange(e) {
this.setState({
name: this.props.getData()
});
}


render() {
return <div className="widget">
{this.state.name}
<button onClick={this.handleChange}>Inc</button>

</div>;
}
}

React.render(<Example getData={getData}/>, document.getElementById('container'));

编辑(替代方式):

let getData = () => Math.random();

class Example extends React.Component{
constructor(props) {
super(props);
this.makeRequest = this.makeRequest.bind(this)
this.state = {
page:1,
name:''
};
}

makeRequest(next){
fetch('https://jsonplaceholder.typicode.com/posts/'+this.state.page)
.then(
result => {
console.log('do')
return result.json()}
)
.then(
(resp) => this.setState({
name:resp, page:this.state.page+1})
)
}


render() {
return <div className="widget">
{this.state.name}
<button onClick={this.makeRequest}>Request</button>

</div>;
}
}

React.render(<Example getData={getData}/>, document.getElementById('container'));

关于javascript - react 状态不更新/增量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com