I have come to an issue and I am having difficulties solving it. The array pageNumbers in component B is never populated. It depends on a prop that is only given value after the componentDidMount runs in class A. The Pagination component created in render method of class A does not reRender after it.
import React, { Component, useState, useEffec } from 'react'
import Pagination from './B';
class A extends Component {
constructor(props) {
super(props)
this.state = {
weathers: [],
}
}
componentDidMount() {
console.log("som v componentDidMOunt")
return axios.post(`${URL}/retrieve/fromDb`} .then(
response => {
this.setState({ weathers: response.data })
}
render() {
let cmpnent = <Pagination totalItems = {this.state.weathers.length} />
//totalItems is 0 in first render and length of weathers list in 2nd after
//componentDidMoun in Class A runs.
return cmpnent
}
}
import React, {Component} from 'react';
class B extends Component {
constructor(props) {
super(props)
this.state = {
pageNumbers :[],
}
}
componentDidMount(){
this.fillPageNumber()
}
fillPageNumber() {
this.state.pageNumbers = []
for (let i = 1; i <= Math.ceil(this.props.totalItems / this.props.itemsPerPage); i++) {
this.setState({pageNumbers : [this.state.pageNumbers, i]});
}
}
render(){
console.log("currentPage: " + this.props.currentPage)
return (
<nav>
<ul className='pagination'>
{this.state.pageNumbers.map(number => (
console.log("number:" + number),
<li key={number} className='page-item'>
{number}
</li>
))}
</ul>
</nav>
);
}
}
export default Pagination;