文章15
标签3
分类5

React defaultValue && setState的问题

场景

我在做一个类似 p2p 好友发送信息的场景 B连接到A之后,将 defauleValue 值改变

我控制了 input 不可输入 和 默认值 连接之后改变成可输入默认值修改。

问题:可输入解决了,默认值没变 :我刚以为是 useState 的问题

react 为了提高整体的渲染性能,会将一次渲染周期中的 state 进行合并,在这个渲染周期中你对所有setState的所有调用都会被合并起来之后,再一次性的渲染,这样可以避免频繁的调用setState导致频繁的操作dom。于是我写了 useState 回调

 setWait((wait)=>wait = false);
 setWaitTitle((waitTitle)=>waitTitle = '开始发送信息吧');

事实证明还是不行,与是我觉得是 defaultValue 的问题,都知道 react 的受控表单控件 其实 defaultValue 是 react库自己的属性,我一直以为是原生属性 所以 react 为处理这样的问题让我们为元素加 key

 <textarea id="comment" ref={refValue} disabled={wait} defaultValue={waitTitle} key={waitTitle} rows="1"></textarea>

现在就成功解决了

面试被问到 cookie和session

我貌似还没做到过跟 cookie 和 session 相关的。这是记录一下,也是学习!Sim.jpg

cookie (整个web开发的技术)

cookie 客户端电脑中用于保存会话状态的资源是保存在客户端电脑里面的。(网络会话状态跟踪的技术)

会话是一组请求与响应构成,围绕着一件事做请求与响应。

HTTP 协议是一种无状态协议,这次请求与响应下一次是获取不到的,没办法实现状态的跟踪。所以产生了 cookie

cookie 是由服务器生成,保存在客户端的一种信息载体。这个载体存放用户访问站点该站点的会话状态信息。

服务器生成 cookie 放在响应头,响应的形式发送到客户端。客户端接受到响应后,将 cookie 保存到客户端。当客户端再次发送同类请求后,在请求中会携带保存在客户端的 cookie 数据,发生到服务端,由服务器对会话进行跟踪。

cookie 是由若干键值对构成,这里的键一般称为 name,值称为 value。键和值都是 字符串

cookie 登录的应用(Node.js)

哔哩哔哩 av: BV1hw411d7Vg

session (整个web开发的技术)

session 即会话,是 web 开发中的一种会话状态跟踪技术。cookie 是将会话状态存在 客户端硬盘里。而 session 是存放在服务端

在服务端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务端的对象中

为什么使用cookie和session

我们都知道 http 协议是无状态的,服务器无法识别两条 http 请求是否是同一个用户发送的。如果想记录多次请求是否是同一个用户发送的。我们通常使用 cookie 和 session 来确定会话双方的身份。

第一次访问创建 session 对象,给 session对象分配一个唯一的ID

把SESSIONID 作为 cookie 的值发送给浏览器保存

第二次访问的时候,浏览器带着 SESSIONID 的 cookie 访问服务器

服务器校验验证

我为什么使用 Typecho

以前自己写了一个 前后端分离 vue + node + mongdb 的一个博客,前台展示文章友链分类,后台增删改查文章等等。
Myblogs
一直想弄酷一点的博客,来写写文章,分享所想这些。
我以前的文章就不迁移过来了,今天把服务器都重置了,大多都是 api 文档 也没想过要备份。

Typecho markdown bug
空白区域也会构建到文章上

  1. 打开 var/Widget/Abstract/Contents.php;
  2. 找到 public function applyFields(array $fields, $cid) 这个方法,搜寻 $this->setField($name, $type, $value, $cid); 这行代码;
  3. 在 $this->setField 这行代码的上方添加代码:
// hack
if(empty($value)){
    $this->db->query($this->db->delete('table.fields')
        ->where('cid = ? AND name = ?', $cid, $name));
    continue;
}
  1. 保存文件即可。

虽然上面的代码可以帮助你在更新文章时删除冗余字段,但已经保存在数据库中的字段,还需要你再去 phpmyadmin 中手动删除。
下面的SQL代码可以帮助你自动完成这项工作:

DELETE FROM typecho_fields WHERE str_value = '' OR str_value = '0';

(PS:记得事先备份数据库,并且更换typecho_fields为你正确的Typecho字段表)

">