У меня есть этот компонент класса, и я хочу переписать его в функциональный компонент без сохранения состояния с помощью recompose
:
export default class Popular extends Component {
state = {
value: 0,
selected: "All",
repos: null
}
componentDidMount() {
this.handleSelected(this.state.selected)
}
handleChange = (e, value) => {
this.setState({ value })
}
handleSelected = lang => {
this.setState({
selected: lang,
repos: null
})
fetchPopularRepos(lang).then(repos => {
this.setState({
selected: lang,
repos
})
})
}
Я пытаюсь объединить onSelectLanguage
и onFetchRepos
в одной функции, как в моем коде, перед рефакторингом. Я не знаю, как переписать это для моей функции componentDidMount.
UPDATE:
получил эту работу с:
const enhance = compose(
withStateHandlers(initialState, {
onChangeLanguage,
onSelectLanguage
}),
lifecycle({
componentDidMount() {
fetchPopularRepos(this.props.selected).then(repos => {
this.setState({
repos
})
})
}
}),
lifecycle({
componentDidUpdate(prevProps) {
if (this.props.selected !== prevProps.selected) {
this.setState({ repos: null })
fetchPopularRepos(this.props.selected).then(repos => {
this.setState({
repos
})
})
}
}
})
)
Эти жизненные циклы выглядят не очень сексуально. Не уверен, стоит ли это рефакторинга.