前言
这几天因为实习的原因,很短的时间内简单的接触了一下前端。只能在没啥基础的情况下嗯看React了
说实话js我都不会,但井字棋教程这么写的
我们假定你已经对 HTML 和 JavaScript 都比较熟悉了。即便你之前使用其他编程语言,你也可以跟上这篇教程的。除此之外,我们假定你也已经熟悉了一些编程的概念,例如,函数、对象、数组,以及 class 的一些内容。
好吧,相信他
事实也确实如此,好在react 的官方教程非常的友好,照着教程的帮助下,两天把井字棋弄完了
入门教程: 认识 React – React (docschina.org)
整个过程还是很舒服的,毕竟有原码可以直接比较错误。前端F12直接调试也非常的舒服。
关于井字棋的最后6个改进,做了一些前面的,感觉更多是算法上的问题,有一些对于数组的使用,有一些需要你去思考放在哪个事件上面,没有什么超过教程的东西
js不太懂的语法也就那几个,百度或者看官方文档基本都能解决,边做边学的效率还是很高的
开这个分组,是因为后面几个星期或者一个月会写一些运维的工具台,可以把前端踩的坑都记录一下
和后端交互
如果上网搜的话,会看到fetch和ajax。快速浏览了一下用了fetch
当然,react新手教程并不会教我Fetch API如何使用,但是mdn会
使用 Fetch – Web API 接口参考 | MDN (mozilla.org)
按照上面所说 fetch 的基本使用如下:
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
为了讨论.then() ,需要先递归的学习
异步 JavaScript 简介 – 学习 Web 开发 | MDN (mozilla.org)
Promise – JavaScript | MDN (mozilla.org)
涉及到 事件处理 回调
异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。
一个
Promise
必然处于以下几种状态之一:
- 待定(pending):初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled):意味着操作成功完成。
- 已拒绝(rejected):意味着操作失败。
待定状态的 Promise 对象要么会通过一个值被兑现,要么会通过一个原因(错误)被拒绝。当这些情况之一发生时,我们用 promise 的
then
方法排列起来的相关处理程序就会被调用。
此时是可以和本地后端通信了,如果需要和不同域名和ip的地方通信就涉及到了跨域的问题
跨源资源共享(CORS) – HTTP | MDN (mozilla.org)
可以不去细读,需要知道的是 通过在头部添加cors
var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };
让前端来支持
最后如下
componentDidMount(){
var t = this;
fetch("http://x.x.x.x/test", {
method: 'GET',
headers: {
mode: 'cors'
}
})
.then(
function (res) {
console.log(res);
res.json().then(function (data) {
console.log(data);
t.setState({
data: data
});
console.log(Object.keys(t))
}
)
})
}
后端也建立一个简单的通信
flask为例,添加:
from flask_cors import CORS
CORS(app, resources=r'/test')
再建立路由即可
关于this
为什么不能直接在函数中使用 this.setState ,而需要t.setSetate呢
我们通过devtools设置断点
会发现
此时的this是没有定义的,但是t会指向message对象
参考:
this – JavaScript | MDN (mozilla.org)
Promise中this指向问题_剪断红线,替代月老的博客-CSDN博客
我们得出一些总结
作为对象的方法时,他能展现出我们预期的,即this为这个对象
作为函数的大部分时候,例如非严格的正常函数,会在未绑定时指向 window
但对于Promise
对象而言,情况有些复杂,姑且记得
Promise
对象的回调函数如果是箭头函数时,this
指向一致,都是指向外层第一个普通函数的this
。但是Promise
对象的回调函数如果是匿名函数时
Promise
对象的状态是pending
,那么匿名回调函数的this
指向window
。
Promise
对象的状态是resolved
,那么匿名回调函数的this
指向undefined
。
如何处理传递过来的对象
转递过来的res.json 会在state里面存储为对象
但是这个对象我是并不知道他的key的,我需要遍历整个对象
好在
let key = Object.keys(this.state.data);
可以直接获取所有的key
这样我们就可以通过key来获得所有的键值对了,当然也可以Object.values(obj)
评论
催更