Javascript 反应:我有一个呈现用户数据的组件,如果有';呈现数据时出错
我有一个section组件,它获取用户数据,然后在3个单独的标题下显示这些数据。如果数据获取失败,我想添加一个单独的呈现,它会在标题下显示一条错误消息,我不太确定这样做的最佳实践是什么。我有我的组件和服务来获取下面列出的数据,有什么建议吗Javascript 反应:我有一个呈现用户数据的组件,如果有';呈现数据时出错,javascript,reactjs,conditional-rendering,Javascript,Reactjs,Conditional Rendering,我有一个section组件,它获取用户数据,然后在3个单独的标题下显示这些数据。如果数据获取失败,我想添加一个单独的呈现,它会在标题下显示一条错误消息,我不太确定这样做的最佳实践是什么。我有我的组件和服务来获取下面列出的数据,有什么建议吗 User Info Component 如何/在何处进行API调用并将其传递给组件?React有一个新的hooks api,它允许您在大多数情况下使用基于函数的组件,但听起来您对React还很陌生,在开始时,类和函数组件之间的二分法可能会对您有所帮助。现在,
User Info Component
如何/在何处进行API调用并将其传递给组件?React有一个新的hooks api,它允许您在大多数情况下使用基于函数的组件,但听起来您对React还很陌生,在开始时,类和函数组件之间的二分法可能会对您有所帮助。现在,请这样想:
- 功能组件:哑。只需获取数据并进行渲染
- 类组件(或带挂钩的函数组件):呈现数据,但也有自己的状态和生命周期方法
class MyComponent extends react.Component {
constructor(props){
super(props);
this.state = {
loading: false,
error: false,
data: {}
}
}
//this is just a utility function so that you can use async / await with setState
setStateAsync(state) {
return new Promise((resolve) => {
this.setState(state, resolve)
});
}
//will run after your component is mounted to the dom
async componentDidMount() {
try{
await this.setStateAsync({...this.state, loading: true})
let data = await getCustomer();
await this.setStateAsync({...this.state, loading: false, data})
} catch(e) {
this.setState({error: true, loading: false, data: {}})
}
}
//stick what you would normally return in a function component here
render() {
return (
{this.state.loading ? (<div>"...loading"</div>) :
this.state.error ? (<div style={{color: 'red'}}>ERROR!</div> :
(<CustomerDetails customer={this.state.data} />)
)
}
}
类MyComponent扩展了react.Component{
建造师(道具){
超级(道具);
此.state={
加载:false,
错误:false,
数据:{}
}
}
//这只是一个实用函数,因此您可以将async/await与setState一起使用
SetStateSync(状态){
返回新承诺((解决)=>{
this.setState(状态,解析)
});
}
//将在组件装入dom后运行
异步组件didmount(){
试一试{
等待this.setStateAncy({…this.state,加载:true})
让数据=等待getCustomer();
等待this.setStateAncy({…this.state,加载:false,data})
}捕获(e){
this.setState({error:true,load:false,data:{})
}
}
//在函数组件中粘贴通常返回的内容
render(){
返回(
{this.state.loading?(“…loading”):
this.state.error?(错误!:
()
)
}
}
通读了解有关类组件的更多信息。上面的示例非常简单,但请注意:
您能告诉我们您在哪里/如何进行API调用,以及如何获取这些信息(以及错误信息)吗到这个组件了吗?是的,我现在将编辑原始问题,将服务包括在我的axios调用中!至于错误,我希望创建一个带有图标和通用文本的简单div,在数据无法正确呈现的任何时候都会显示。因此,我实际上并没有记录错误,只是创建一个简单的div供最终用户查看任何事情发生的事件wrong@JCalkins89,您所说的“错误呈现数据”是什么意思?呈现函数中出现异常?
API service to fetch user data
import Axios from 'axios'
import { logError } from './logging'
export async function getCustomer(customer = {}) {
try {
const { customerId } = customer
console.info('Customer ID:', customerId)
const { data } = await Axios.get('https://getUserInfoAPI.com')
return new Promise(res => {
setTimeout(() => res(data), 3000)
})
} catch (error) {
logError(error)
throw error
}
}
class MyComponent extends react.Component {
constructor(props){
super(props);
this.state = {
loading: false,
error: false,
data: {}
}
}
//this is just a utility function so that you can use async / await with setState
setStateAsync(state) {
return new Promise((resolve) => {
this.setState(state, resolve)
});
}
//will run after your component is mounted to the dom
async componentDidMount() {
try{
await this.setStateAsync({...this.state, loading: true})
let data = await getCustomer();
await this.setStateAsync({...this.state, loading: false, data})
} catch(e) {
this.setState({error: true, loading: false, data: {}})
}
}
//stick what you would normally return in a function component here
render() {
return (
{this.state.loading ? (<div>"...loading"</div>) :
this.state.error ? (<div style={{color: 'red'}}>ERROR!</div> :
(<CustomerDetails customer={this.state.data} />)
)
}
}