<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[RaoMeng1995的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/RaoMeng1995</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; RaoMeng1995]]></copyright><item><title><![CDATA[Android源码分析-setContentView加载布局流程]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/89516542</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/89516542</guid><author>RaoMeng1995</author><pubDate>Thu, 25 Apr 2019 15:08:09 +0800</pubDate><description><![CDATA[上篇文章追溯了Android源码中Activity的启动流程，那么Activity启动之后，是如何加载布局的呢？这篇文章我们继续来追溯这一块的Android源码。
Activity-&gt;setContentView
public void setContentView(@LayoutRes int layoutResID) {
    getWindow().setContentView(la...]]></description><category></category></item><item><title><![CDATA[Android源码分析-Android9.0下的Activity启动流程]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/89501470</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/89501470</guid><author>RaoMeng1995</author><pubDate>Wed, 24 Apr 2019 19:45:59 +0800</pubDate><description><![CDATA[前言
最近在阅读Android源码时，发现最新的Android9.0源码中startActivity启动Activity的流程相比于低版本的Android源码来说改动较大，且本人在网上也没有找到基于Android9.0的相关源码分析文章。故写下此文，记录下源码追踪流程，方便以后自己复查，同时也分享给有需要的读者。
Activity-&gt;startActivity
    @Override
 ...]]></description><category></category></item><item><title><![CDATA[事件分发机制注意点总结]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/88996949</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/88996949</guid><author>RaoMeng1995</author><pubDate>Wed, 03 Apr 2019 15:37:29 +0800</pubDate><description><![CDATA[1、同一个事件序列是指从手指接触屏幕的那一刻起，到手指离开屏幕的那一刻结束，在这个过程中所产生的一系列事件，这个事件序列以down事件开始，中间含有数量不定的move事件，最终以up事件结束。
2、正常情况下，一个事件序列只能被一个View拦截且消耗。因为一旦一个元素拦截了某个事件，那么同一个事件序列内的所有事件都会直接交给它处理，因此同一个事件序列中的事件不能分别由两个View同时处理，但是通过...]]></description><category></category></item><item><title><![CDATA[React通过redux缓存列表数据以及滑动位置，回退时恢复页面状态]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87875510</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87875510</guid><author>RaoMeng1995</author><pubDate>Fri, 22 Feb 2019 11:42:12 +0800</pubDate><description><![CDATA[在使用React和React-router实现单页面应用时，会有这样一个场景：从列表页面点击某项条目进入详情页，然后回退至列表页面时，列表页面会重新刷新，不仅数据重新获取了，滚动条也回到了顶部。用户要继续查看剩余数据的话，需要重新滑动到之前点击的那个条目，如果列表做了分页的话就更麻烦了，这对于用户体验来说是非常不好的。
所以我们希望能做到，从二级页面回退至列表页面时，列表页面能保留之前的状态（数据...]]></description><category></category></item><item><title><![CDATA[create-react-app同时对多个框架(antd+antd-mobile)做按需加载的方法]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87360227</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87360227</guid><author>RaoMeng1995</author><pubDate>Fri, 15 Feb 2019 14:25:55 +0800</pubDate><description><![CDATA[在React项目开发中，经常需要引用一些实用的第三方框架。在使用一些比较庞大的第三方框架时，框架内的各种资源文件数量巨大，这时，如果我们在每次使用框架时，都将框架内所有资源都全部加载的话，这将使得页面的性能大大降低。这时，我们就需要对这些庞大的第三方框架做按需加载了。

首先介绍下对单个框架做按需加载的方法

其实在使用create-react-app脚手架的情况下，对单个框架做按需加载的方法，网...]]></description><category></category></item><item><title><![CDATA[React通过redux-persist持久化数据存储]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87270367</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87270367</guid><author>RaoMeng1995</author><pubDate>Thu, 14 Feb 2019 14:06:01 +0800</pubDate><description><![CDATA[在React项目中，我们经常会通过redux以及react-redux来存储和管理全局数据。但是通过redux存储全局数据时，会有这么一个问题，如果用户刷新了网页，那么我们通过redux存储的全局数据就会被全部清空，比如登录信息等。
这个时候，我们就会有全局数据持久化存储的需求。首先我们想到的就是localStorage，localStorage是没有时间限制的数据存储，我们可以通过它来实现数据的...]]></description><category></category></item><item><title><![CDATA[React对fetch的简单封装]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87261038</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87261038</guid><author>RaoMeng1995</author><pubDate>Thu, 14 Feb 2019 11:43:41 +0800</pubDate><description><![CDATA[import {getStrValue, isObjNull} from &quot;./common&quot;;

export function fetchPost(url, params, header) {
    if (isObjNull(header)) {
        header = {}
    }

    let formData = new FormData()
    if (par...]]></description><category></category></item><item><title><![CDATA[JavaScript格式化Date类型的扩展方法]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87260285</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87260285</guid><author>RaoMeng1995</author><pubDate>Thu, 14 Feb 2019 11:30:56 +0800</pubDate><description><![CDATA[//yyyy-MM-dd hh:mm:ss
Date.prototype.format = function (fmt) {
    let o = {
        &quot;M+&quot;: this.getMonth() + 1,                 //月份
        &quot;d+&quot;: this.getDate(),                    //日
        &quot;h+&quot;: ...]]></description><category></category></item><item><title><![CDATA[JavaScript中String类型的一些实用扩展方法]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87259954</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/87259954</guid><author>RaoMeng1995</author><pubDate>Thu, 14 Feb 2019 11:26:20 +0800</pubDate><description><![CDATA[/**
&amp;nbsp;* 是否以某一字符串开头
&amp;nbsp;* @param s
&amp;nbsp;* @returns {boolean}
&amp;nbsp;*/
String.prototype.startWith = function (s) {
&amp;nbsp; &amp;nbsp; if (s == null || s == &quot;&quot; || this.length == 0 || s.length &amp;gt; this...]]></description><category></category></item><item><title><![CDATA[React-redux的原理以及简单使用]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/84959485</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/84959485</guid><author>RaoMeng1995</author><pubDate>Tue, 11 Dec 2018 18:13:43 +0800</pubDate><description><![CDATA[当一个react项目组件层级越来越深，页面越来越多的时候，数据在各个组件层级和页面之间传递的需求就会比较多，很多变量也需要做成可全局管理的。在这个时候，redux和react-redux的使用就很有必要了。它们能帮助我们很方便的进行项目全局性的数据管理。
下面，就写一下我自己对 redux 和 React-redux 的学习以及使用的心得，权当是对学习过程的一种记录和分享。
一、redux和Rea...]]></description><category></category></item><item><title><![CDATA[React计算antd的TreeSelect组件所选中的子节点数量]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/84314408</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/84314408</guid><author>RaoMeng1995</author><pubDate>Wed, 21 Nov 2018 10:18:15 +0800</pubDate><description><![CDATA[antd的TreeSelect组件在处理例如公司层级、学科系统、分类目录等等的树形选择需求时很好用。
在使用这个组件时，我们往往需要获取所选中的所有节点以及所选中的所有子节点的数量。
查看TreeSelect的api找到了组件的选中回调方法onChange

在理解onChange方法的参数含义前，要先知道TreeSelect组件的数据格式

onChange方法有三个参数，value表示所选中的...]]></description><category></category></item><item><title><![CDATA[去掉antd的Input组件获取焦点时的蓝色边框]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/84314389</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/84314389</guid><author>RaoMeng1995</author><pubDate>Wed, 21 Nov 2018 10:17:24 +0800</pubDate><description><![CDATA[antd的Input输入框组件在获取焦点时会有蓝色的边框显示，最初尝试通过设置outline:none的方法去掉这个边框，但是发现这个方法不起作用。
最终通过在F12调试页面下的Elements选项下的多次观察和实验，发现antd的Input组件在获取焦点情况下的蓝色边框是通过box-shadow来实现的，找到问题所在就很好解决了。
解决方法的css样式如下：
.ant-input-affix-w...]]></description><category></category></item><item><title><![CDATA[JavaScript取出字符串中括号里的内容]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652310</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652310</guid><author>RaoMeng1995</author><pubDate>Fri, 02 Nov 2018 11:09:07 +0800</pubDate><description><![CDATA[
/**
 * 取出中括号内的内容
 * @param text
 * @returns {string}
 */
export function getBracketStr(text) {
    let result = ''
    if (isObjEmpty(text))
        return result
    let regex = /\[(.+?)\]/g;
    le...]]></description><category></category></item><item><title><![CDATA[React 解决fetch跨域请求时session失效]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652295</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652295</guid><author>RaoMeng1995</author><pubDate>Fri, 02 Nov 2018 11:08:16 +0800</pubDate><description><![CDATA[在解决fetch跨域请求接口的时候，一般都是让后台接口在返回头里添加
//允许所有域名的脚本访问该资源
header(&quot;Access-Control-Allow-Origin: *&quot;);


确实这样是可以解决跨域请求的问题，但是如果我们要在请求的时候添加session，那么这样设置就会出现问题了。
fetch添加Cookie验证的方法是设置credentials: ‘include’
fetch...]]></description><category></category></item><item><title><![CDATA[修改Antd组件样式的方法]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652284</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652284</guid><author>RaoMeng1995</author><pubDate>Fri, 02 Nov 2018 11:07:38 +0800</pubDate><description><![CDATA[1、F12打开调试，选中Elements选项

2、在Elements的元素树中选中相应的Antd组件布局，然后查看右端的css样式表，找到控制组件的css控制器结构。

3、最后在我们自己的css样式文件中修改对应的控制器属性就可以了


...]]></description><category></category></item><item><title><![CDATA[React 基础知识总结]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652262</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/83652262</guid><author>RaoMeng1995</author><pubDate>Fri, 02 Nov 2018 11:06:34 +0800</pubDate><description><![CDATA[一、Node.js
Node.js并不是一个JavaScript框架，Node.js是JavaScript运行时的运行环境，类比Java中的JVM。
java的开端是什么，无疑是JVM，自从有了JVM，java才能吹牛说自己是“一次编写处处运行”，不管你是windows还是linux，只要安装了对应版本的JVM都可以运行.class文件。
同样Node.js的作用和JVM的一样一样的，也是js的运...]]></description><category></category></item><item><title><![CDATA[JavaScript学习笔记]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81279545</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81279545</guid><author>RaoMeng1995</author><pubDate>Mon, 30 Jul 2018 09:34:19 +0800</pubDate><description><![CDATA[所有的web开发都是【请求】+【响应】

推荐JavaScript中使用单引号引用字符串，HTML中使用双引号，防止冲突

JavaScript代码、网页代码执行顺序是从上到下依次执行

&amp;lt;noscript&amp;gt;&amp;lt;/noscript&amp;gt;标签，在浏览器不支持JavaScript内容时会展示noscript标签内的内容
&amp;lt;noscript&amp;gt;
    &amp;lt;p&amp;gt;本页...]]></description><category></category></item><item><title><![CDATA[微信小程序自定义组件-城市选择]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81068969</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81068969</guid><author>RaoMeng1995</author><pubDate>Mon, 16 Jul 2018 17:44:58 +0800</pubDate><description><![CDATA[上篇文章有介绍一些小程序的自定义组件语法，这篇文章就不多做赘述，重点介绍组件的实现逻辑。

先把效果图贴出来，看看要实现的效果：

 



城市选择效果图.gif

首先还是设置布局，从实现效果看，组件可分成三个部分：展示城市数据的二级列表、侧边的滑动栏以及中间的提示框。也就是一个scroll-view，一个view布局以及一个text。最终确定的wxml布局文件如下：


&amp;lt;scroll...]]></description><category></category></item><item><title><![CDATA[微信小程序自定义组件-可清除的input组件]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81068870</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81068870</guid><author>RaoMeng1995</author><pubDate>Mon, 16 Jul 2018 17:40:33 +0800</pubDate><description><![CDATA[最近正在做的一个小程序项目中需要用到一个可清除的输入框控件，为了在项目中使用方便以及方便其他项目直接使用，便封装了一个可清除的input自定义组件。

组件需要达到的需求是：输入框内没有内容时，删除按钮隐藏；当输入框内有内容时，删除按钮显示，点击删除按钮则清空输入框内所有内容。并且还可以设置输入框整体样式以及输入框左侧图标。

明确了需求之后，就可以开始着手实现了。

首先，在目标目录下新建一个自...]]></description><category></category></item><item><title><![CDATA[OkHttp如何移除User-Agent，Accept-Encoding等框架自动添加的请求头参数]]></title><link>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81068831</link><guid>https://blog.youkuaiyun.com/RaoMeng1995/article/details/81068831</guid><author>RaoMeng1995</author><pubDate>Mon, 16 Jul 2018 17:39:14 +0800</pubDate><description><![CDATA[使用OkHttp网络框架在进行网络请求时会发现，传到后台的请求头中会比我们自己添加的参数多出几个额外参数。查看源码会发现


 private Response getResponseWithInterceptorChain() throws IOException {
    // Build a full stack of interceptors.
    List&amp;lt;Intercept...]]></description><category></category></item></channel></rss>