啥东西?咋用?
Async 组件
直接看例子:
// 注意这里
const loadUsers = () =>
fetch("https://jsonplaceholder.typicode.com/users")
.then(res => (res.ok ? res : Promise.reject(res)))
.then(res => res.json())
function App() {
return (
<div className="container">
<Async promiseFn={loadUsers}> // 注意这里
{({ data, err, isLoading }) => {
if (isLoading) return "Loading..."
if (err) return `Something went wrong: ${err.message}`
if (data)
return (
<div>
<div>
<h2>React Async - Random Users</h2>
</div>
{data.map(user=> (
<div key={user.username} className="row">
<div className="col-md-12">
<p>{user.name}</p>
<p>{user.email}</p>
</div>
</div>
))}
</div>
)
}}
</Async>
</div>
);
}
export default App;
注意到组件参数 promiseFn 传入一个期值函数。提供三个 props:data, err, isLoading。从而简化了我们的期值处理。
useAsync
上面的用法也可写成:
function App() {
const { data, error, isLoading } = useAsync({ promiseFn: loadUsers })
if (isLoading) return "Loading..."
if (error) return `Something went wrong: ${error.message}`
if (data)
这样,我们可以先加上自己的行为,然后再渲染。
Async.XXX 工具组件
直接看代码:
// Our App component
function App() {
return (
<div className="container">
<Async promiseFn={loadUsers}>
<Async.Loading>Loading...</Async.Loading> // 注意
<Async.Fulfilled> // 注意
{data => {
return (
<div>
<div>
<h2>React Async - Random Users</h2>
</div>
{data.map(user=> (
<div key={user.username} className="row">
<div className="col-md-12">
<p>{user.name}</p>
<p>{user.email}</p>
</div>
</div>
))}
</div>
)
}}
</Async.Fulfilled> // 注意
<Async.Rejected> // 注意
{error => `Something went wrong: ${error.message}`}
</Async.Rejected>
</Async>
</div>
);
}
其实就是条件渲染工具。