【发布时间】:2020-05-13 21:01:17
【问题描述】:
我尝试使用 react typescript 和 useContext 从 tvmaze api 获取一些数据,我可以显示数据但 useContext 不会随着返回值更新,所以当我使用 map 函数时没有显示任何建议?
import React , { Fragment, useEffect, useContext, useState } from 'react'
import axios from 'axios'
import Store from '../Store/Store'
import "core-js/stable";
import "regenerator-runtime/runtime";
export default function App() {
const {state, dispatch} = useContext(Store)
useEffect(() => {
state.episodes.length === 0 && fetchDataAction()
})
const fetchDataAction = async () => {
const URL = 'http://api.tvmaze.com/singlesearch/shows?q=rick-&-morty&embed=episodes'
const data = await fetch(URL);
const dataJSON = await data.json();
console.log(dataJSON._embedded.episodes);
return dispatch({
type: "FETCH-DATA",
payload: dataJSON._embedded.episodes,
})
}
return (
<Fragment>
{console.log(state)}
<h1>Rick and Morty</h1>
<p>Pick your favorite episode!!!</p>
<section>
{state.episodes.map((episode: any) => {
return (
<section key={episode.id}>
<img src={episode.image.medium} alt={`Rick and Morty ${episode.name}`} />
<section>
Season: {episode.season} Number: {episode.number}
</section>
</section>
)
})}
</section>
</Fragment>
)
}
我没有使用 redux,但我使用的是 babel + webpack,我对这一切真的很陌生,所以我在这里有点迷失了我的 Store.tsx 文件,
import React from 'react'
interface IState {
episodes: [],
favorites: []
}
interface IAction {
type: string,
payload: any
}
const initialState:IState = {
episodes: [],
favorites: []
};
const Store = React.createContext<IState | any>(initialState)
function reducer(state: IState, action: IAction): IState {
switch (action.type) {
case 'FETCH_DATA':
return { ...state, episodes: action.payload}
default:
return state
}
}
export function StoreProvider(props: any): JSX.Element {
const [state, dispatch] = React.useReducer(reducer, initialState)
return <Store.Provider value={{state, dispatch}}>{props.children}</Store.Provider>
};
export default Store;
【问题讨论】:
-
你的商店代码是什么?
-
你在使用 redux 吗?
-
嗨,我没有使用 redux,我更新了帖子并输入了我的商店代码。
-
为什么你的App文件中有两个export default?
-
哦抱歉这是一个帖子错误最后已编辑我不使用它
标签: javascript reactjs typescript fetch react-hooks