Единственный способ передать данные в качестве исходного состояния редуктору - это извлечь данные перед рендерингом вашего компонента.Вы можете сделать это в родительском:
const Parent = () => {
const [data, setData] = useState(null)
useEffect(() => {
apiCall().then(response => {
setData(response.data)
})
}, [])
if (!data) return null
return <MyComponent data={data} />
}
const MyComponent = ({ data }) => {
const [state, dispatch] = useReducer(reducer, data)
... // utilize state
}
.
Вышеуказанный подход нежелателен, поскольку он нарушает разделение интересов.Обычно лучше установить нулевое начальное состояние и вызвать dispatch
, чтобы изменить его на желаемое состояние:
const MyComponent () => {
const [state, dispatch] = useReducer(reducer, null)
useEffect(() => {
apiCall().then(response => {
dispatch({
type: 'INITIALIZE',
data: response.data
})
})
}, [])
if (!state) return null
... // utilize state
}
.