То, что вы есть, почти в порядке, одно улучшение, которое вы можете сделать:
вместо
{profile.data ? <Table bordered columns={columns} dataSource={profile.data.data} /> : ''}
Вы можете:
if(!profile.data)
return <h1>Loading</h1>; // You can show some loading comonent here, instead of just writing loading
return (
<div>
<Table bordered columns={columns} dataSource={profile.data.data} />
</div>
);
Вы можете использовать async await , если вы хотите, чтобы вызов API завершился, но я бы не советовал, вы должны показать что-то пользователю, пока вы извлекаете данные с сервера. Вы можете async ждать, как это:
async componentDidMount(){
await dispatch({ stuff })
}
Но в этом случае это не будет работать, потому что componentDidMount
вызывается после монтирования, и если компонент смонтирован, ошибка уже произошла, и вы не должны использовать componentWillMount
, поскольку она устарела. Вам придется где-то асинхронно ожидать в родительском компоненте. Но не проходите через все эти неприятности, просто сделайте то, что я предложил выше.