Вы никогда не получите 20 значений, поскольку они не добавляются, вы просто перезаписываете значения категорий в каждом вызове.
this.setState({
...this.state.categories,
categories: res.data.data
});
Здесь categories: res.data.data
переписывается.
Просто измените свой код на:
axios
.get(
"LINK_TO_API"
)
.then(res => {
this.setState((state) => ({
...state,
categories: [...state.categories, ...res.data.data]
}));
})
.catch(function(error) {
console.log(error);
});