Ina*_*san 1 javascript rxjs typescript reactjs rxjs6
最近,我一直在尝试在 React 应用程序中使用 rxjs 提取 API 请求,这是我提出的解决方案。
您对此有何看法?
有什么我应该遵循的良好做法吗?
如果有什么好的解决方案请告诉我。
import axios from 'axios';
import { Observable } from 'rxjs';
import './App.css';
export class App extends Component {
state = {
users: []
};
componentDidMount() {
const fetchUserSubscription$ = this.fetchUsersObservables();
fetchUserSubscription$.subscribe(data =>
this.setState({
users: data
})
);
}
fetchUsers = async () => {
const response = await axios.get(
'https://jsonplaceholder.typicode.com/users'
);
const data = response.data;
this.setState({ users: data });
};
fetchUsersObservables = () =>
new Observable(observer => {
axios
.get('https://jsonplaceholder.typicode.com/users')
.then(res => {
observer.next(res.data);
observer.complete();
})
.catch(err => observer.error(err));
});
render() {
const { users } = this.state;
return (
<div className="App">
{users.map(u => (
<ul key={u.id}>
<li>{u.name}</li>
</ul>
))}
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
您不必手动将您的承诺转换为可观察量。对于 rxjs > 6.0,您可以使用from库中的转换函数(注意 rxjs < 6.0 有该fromPromise函数)。
请阅读from 文档中的相关内容。
从数组、类数组对象、Promise、可迭代对象或类 Observable 对象创建 Observable。
import { from } from 'rxjs';
const promise = axios.get('https://jsonplaceholder.typicode.com/users')
const observable = from(promise);
Run Code Online (Sandbox Code Playgroud)
优点是您不必编写任何自定义观察者,处理成功响应、错误响应和取消请求都已为您正确定义。
| 归档时间: |
|
| 查看次数: |
4538 次 |
| 最近记录: |