无法使用 Parent 传递的值在 child 组件内设置状态
Unable to setState inside child component using the value passed by Parent
我遇到这种情况,我正在实现一个分页组件,我将 parent 组件的长度传递给该组件。我无法打印此 child 组件中的页码。它正在投掷 "Maximum depth reached"
https://codesandbox.io/s/focused-benz-kfn9q
有人可以帮我吗?
Parent
import React from "react";
import ReactDOM from "react-dom";
import Pagination from "./Pagination";
import "./styles.css";
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
length: 0
};
}
componentDidMount() {
this.setState({ length: 99 });
}
render() {
return <Pagination dataCount={this.state.length} />;
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Child
import * as React from "react";
export default class Pagination extends React.Component {
componentDidMount() {
console.log(this.props);
}
renderPageNumbers = () => {
const numberOfPages = Math.ceil(this.props.dataCount / 10);
let pages = [];
for (let i = 1; i < numberOfPages; i++) {
pages.push(<span key={i}>{i}</span>);
}
this.setState({ pages });
};
render() {
return <>{this.renderPageNumbers()}</>;
}
}
您需要 renderPageNumbers
函数中的 return 页。例如,
renderPageNumbers = () => {
const numberOfPages = Math.ceil(this.props.dataCount / 2);
let pages = [];
for (let i = 1; i < numberOfPages; i++) {
pages.push(<span key={i}>{i}</span>);
}
return pages;
// this.setState({ pages });
};
CodeSanbox link 已列出 here
让我知道这是否有效。
import * as React from "react";
export default class Pagination extends React.Component {
constructor(props) {
super(props);
this.state = {
pages: this.findNumberOfPages()
};
this.findNumberOfPages = this.findNumberOfPages.bind(this)
}
componentDidMount() {
console.log(this.props);
}
componentDidUpdate(prevProps) {
if(prevProps.dataCount != this.props.dataCount){
this.setState({ pages: this.findNumberOfPages() });
}
}
findNumberOfPages() {
return Math.ceil(this.props.dataCount / 10);
}
renderPageNumbers = () => {
const numberOfPages = this.findNumberOfPages()
let pages = [];
for (let i = 1; i <= numberOfPages; i++) {
pages.push(<span key={i}>{i}</span>);
}
return pages;
};
render() {
return (
<>
{this.props.currentPage > 1 ? <span>Prev</span> : ""}
{this.renderPageNumbers()}
{this.props.currentPage < this.state.pages ? <span>Next</span> : ""}
</>
);
}
}
希望对您有所帮助。
我遇到这种情况,我正在实现一个分页组件,我将 parent 组件的长度传递给该组件。我无法打印此 child 组件中的页码。它正在投掷 "Maximum depth reached"
https://codesandbox.io/s/focused-benz-kfn9q
有人可以帮我吗?
Parent
import React from "react";
import ReactDOM from "react-dom";
import Pagination from "./Pagination";
import "./styles.css";
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
length: 0
};
}
componentDidMount() {
this.setState({ length: 99 });
}
render() {
return <Pagination dataCount={this.state.length} />;
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Child
import * as React from "react";
export default class Pagination extends React.Component {
componentDidMount() {
console.log(this.props);
}
renderPageNumbers = () => {
const numberOfPages = Math.ceil(this.props.dataCount / 10);
let pages = [];
for (let i = 1; i < numberOfPages; i++) {
pages.push(<span key={i}>{i}</span>);
}
this.setState({ pages });
};
render() {
return <>{this.renderPageNumbers()}</>;
}
}
您需要 renderPageNumbers
函数中的 return 页。例如,
renderPageNumbers = () => {
const numberOfPages = Math.ceil(this.props.dataCount / 2);
let pages = [];
for (let i = 1; i < numberOfPages; i++) {
pages.push(<span key={i}>{i}</span>);
}
return pages;
// this.setState({ pages });
};
CodeSanbox link 已列出 here
让我知道这是否有效。
import * as React from "react";
export default class Pagination extends React.Component {
constructor(props) {
super(props);
this.state = {
pages: this.findNumberOfPages()
};
this.findNumberOfPages = this.findNumberOfPages.bind(this)
}
componentDidMount() {
console.log(this.props);
}
componentDidUpdate(prevProps) {
if(prevProps.dataCount != this.props.dataCount){
this.setState({ pages: this.findNumberOfPages() });
}
}
findNumberOfPages() {
return Math.ceil(this.props.dataCount / 10);
}
renderPageNumbers = () => {
const numberOfPages = this.findNumberOfPages()
let pages = [];
for (let i = 1; i <= numberOfPages; i++) {
pages.push(<span key={i}>{i}</span>);
}
return pages;
};
render() {
return (
<>
{this.props.currentPage > 1 ? <span>Prev</span> : ""}
{this.renderPageNumbers()}
{this.props.currentPage < this.state.pages ? <span>Next</span> : ""}
</>
);
}
}
希望对您有所帮助。