上节课我们实现了GitHub
搜索案例的静态组件,上节课是实在没有啥可说的,这节课我们来开始新的内容用axios
发送请求。
回顾
在开始这节课的内容之前,我们来对上节课的内容来做一个简单地回顾:
class
要改成className
style
要改成{{ }}
的形式- 使用了
target
属性一定要加rel
属性 <img>
一定要加alt
属性
以上便是上节课的主要要点,接下来我们开始这节课的内容
功能需求分析
我们来分析一下我们的这个案例,我们是不是要在Search
组件中搜索东西?那么分几步?
- 输入要搜索的关键词
- 点击搜索按钮
- 开始搜索
上面这三步里面最核心的部分是不是在第三步?我们开始搜索是去哪搜索啊?是不是去GitHub
搜索?GitHub
是我们这个项目自身的东西吗?当然不是了。所以说我要通过网络请求去GitHub
去搜索。那么我们是不是就要使用axios
来发送请求了?
功能分析
那么怎么实现,首先是不是要通过按钮来触发?那么我们的按钮是不是要绑定onClick
事件?然后要获取我们输入的值,这个值怎么获取?我们事件在按钮上,获取的是<input>
的值,那是不是要用ref
?等我们点击了按钮,获取到值,是不是就要通过axios
发送请求?
实现
那么我们已经有了思路,怎么实现呢?我们来看一下代码:
export default class Search extends Component { render() { return ( <section className="jumbotron"> <h3 className="jumbotron-heading">Search Github Users</h3> <div> <input ref={c => this.user = c} type="text" placeholder="enter the name you search" /> <button onClick={this.search}>Search</button> </div> </section> ); } search = () => { const { value: keyword } = this.user; axios.get(`http://localhost:5000/search/users?q=${keyword}`).then( response => { console.log(response.data); }, error => { console.log(error); } ); }; }
首先我们给按钮绑定了onClick
事件。并将search
方法作为事件回调。我们是给按钮加的onClick
事件,而我们要取<input>
的值,那么我们是不是要加ref
?我们用的是回调式的ref
。
然后来看search
方法,这个方法里面的第一行大家记不记得是什么意思?这个是不是解构赋值然后把变量名给修改掉。然后我们就axios
发送请求了。但是我们请求的接口这个不是我们自己做的接口服务吗?这个服务里面是什么意思呢?
我们来想一想我们用代码请求GitHub
的接口是不是和爬虫差不多?那如果我们突然被ban
掉了那不就完犊子了。所以说我们开一个接口服务,里面有两个接口,第一个接口直接请求GitHub
,第二个接口直接mock
一堆数据返回回来,所以说当我们请求第一个接口发现我们被ban
了,那么我们就去请求第二个接口,这样就可以维持我们的数据源了。那么好,我们来看一下效果:
诶,熟悉的跨域问题,那么是不是要来设置代理?
const {createProxyMiddleware} = require('http-proxy-middleware') module.exports = function(app) { app.use( createProxyMiddleware("/api1",{ target: "http://api.github.com", changeOrigin: true, pathRewrite:{"^/api1":""} }) ); }
我们设置了setupProxy
,然后在Search
组件的search
方法中请求的url
是不是也要进行修改?一个是端口号,一个是url
前缀。那么我们再来看一下效果:
这一次我们成功拿到了数据。
总结
这节课么样什么重要的内容
- 解构赋值重命名变量
- 复习一下
ref
Copyright statement:The articles of this site are all original if there is no special explanation, indicate the source please when you reprint.
Link of this article:https://work.lynchow.com/article/github_search_axios/