'Page goes blank when switching to different option from dropdown
I have issue with following code where i want to change from newest to oldest of dropdown.
Initially it shows newest to oldest data but when i select oldest to newest then page goes blank and Uncaught Error: Too many re-renders. React limits the number of renders to prevent an infinite loop shows up.
My code is like this:
import { loadable, Global, css, connect, styled, decode } from "frontity";
import React, {Component} from "react";
const InfiniteListTaxNormal = loadable(() => import('./list-tax-infinite-normal'));
const InfiniteListTaxReverse = loadable(() => import('./list-tax-infinite-reverse'));
const options = [
{
label: "newest to oldest",
value: "newest",
},
{
label: "oldest to newest",
value: "oldest",
},
];
let orderState = 0;
class TaxInfiniteList extends Component {
constructor(props) {
super(props);
this.state = {
orderDefault: "newest",
};
this.handleChange = this.handleChange.bind(this);
}
handleChange = (event) => {
event.preventDefault();
this.setState({ orderDefault: event.target.value });
if(event.target.value == "oldest") {
orderState = 1;
} else {
orderState = 0;
}
}
render() {
return (
<div>
<Global styles={sortTaxStyles} />
<div className="SortContainer">
<div className="SortLabel">
<h3>Sorted by</h3>
</div>
<div className="SortSelect">
<select value={this.state.orderDefault} onChange={this.handleChange}>
{options.map((option) => (
<option key={option.value} value={option.value}>{option.label}</option>
))}
</select>
</div>
</div>
{ orderState == 1 ?
<div>
<InfiniteListTaxReverse />
</div>
:
<div>
<InfiniteListTaxNormal />
</div>
}
</div>
);
}
};
export default TaxInfiniteList;
I can see the issue is in setState().
this.setState({ orderDefault: event.target.value });
list-tax-infinite-normal
const InfiniteListTaxNormal = ({ state, link }) => {
// Important
const data = state.source.get(state.router.link);
const {
pages,
isFetching,
isError,
isLimit,
fetchNext
} = useArchiveInfiniteScroll({ limit: 0 });
return (
<Container>
{pages.map(({ Wrapper, key, link, isLast }) => (
<Wrapper key={key}>
<AllTax link={link}/>
</Wrapper>
))}
<ButtonContainer>
{isFetching && <Loading />}
{isLimit && <Button onClick={fetchNext}>Load Next Page</Button>}
{isError && (
<Button onClick={fetchNext}>Something failed - Retry</Button>
)}
</ButtonContainer>
</Container>
);
};
export default connect(InfiniteListTaxNormal);
list-tax-infinite-reverse
const InfiniteListTaxReverse = ({ state, link }) => {
// Important
const data = state.source.get(state.router.link);
const {
pages,
isFetching,
isError,
isLimit,
fetchNext
} = useArchiveInfiniteScroll({ limit: 0 });
return (
<Container>
{pages.map(({ Wrapper, key, link, isLast }) => (
<Wrapper key={key}>
<AllTaxReverse link={link}/>
</Wrapper>
)).slice().reverse()}
<ButtonContainer>
{isFetching && <Loading />}
{isLimit && <Button onClick={fetchNext}>Load Next Page</Button>}
{isError && (
<Button onClick={fetchNext}>Something failed - Retry</Button>
)}
</ButtonContainer>
</Container>
);
};
export default connect(InfiniteListTaxReverse);
Any help would be appreciated.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
