React Context源码是怎么实现的呢

目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api。大多数项目不会直接使用 createContext 然后向下面传递数据,而是采用第三方库(react-redux)。

想想项目中是不是经常会用到 @connect(...)(Comp) 以及

什么是 Context

Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。

一个顶层数据,想要传递到某些深层组件,通过 props 逐层传递将会非常繁琐,使用 Context 可避免显式地通过组件树逐层传递 props

Context 使用示例

import React, { Component, createContext, useConText } from 'react'
const ColorContext = createContext(null)
const { Provider, Consumer } = ColorContext

console.log('ColorContext', ColorContext)
console.log('Provider', Provider)
console.log('Consumer', Consumer)

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      color: 'red',
      background: 'cyan',
    }
  }
  render() {
    return {this.props.children}
  }
}
function Article({ children }) {
  return (
    
      

Context

hello world

{children}
) } function Paragraph({ color, background }) { return (
text
) } function TestContext() { return (
{state => }
) } export default TestContext

页面呈现出的效果

打印 ColorContextProviderConsumer

React Context源码是怎么实现的呢_第1张图片

createContext

// createContext 可以让我们实现状态管理
// 还能够解决传递 Props drilling 的问题
// 假如一个子组件需要父组件的一个属性,但是中间间隔了好几层,这就会出现开发和维护的一个成本。这时候就可以通过这个 API 来解决
function createContext(defaultValue, calculateChangedBits) {
  var context = {
    ?typeof: REACT_CONTEXT_TYPE,
    _calculateChangedBits: calculateChangedBits,
    // As a workaround to support multiple concurrent renderers, we categorize
    // some renderers as primary and others as secondary. We only expect
    // there to be two concurrent renderers at most: React Native (primary) and
    // Fabric (secondary); React DOM (primary) and React ART (secondary).
    // Secondary renderers store their context values on separate fields.
    // 以下两个属性是为了适配多平台
    _currentValue: defaultValue,
    _currentValue2: defaultValue,
    // Used to track how many concurrent renderers this context currently
    // supports within in a single renderer. Such as parallel server rendering.
    _threadCount: 0,
    // These are circular
    Provider: null,
    Consumer: null
  };

  // 以下的代码很简单,就是在 context 上挂载 Provider 和 Consumer,让外部去使用
  context.Provider = {
    ?typeof: REACT_PROVIDER_TYPE,
    _context: context
  };

  var Consumer = {
    ?typeof: REACT_CONTEXT_TYPE,
    _context: context,
    _calculateChangedBits: context._calculateChangedBits
  };

  context.Consumer = Consumer;
  context._currentRenderer = null;
  context._currentRenderer2 = null;
  return context;
}

react 包里面仅仅是生成了几个对象,比较简单,接下来看看它发挥作用的地方。

Consumer children 的匿名函数里面打 debugger。

React Context源码是怎么实现的呢_第2张图片

查看调用栈

React Context源码是怎么实现的呢_第3张图片

主要是 newChildren = render(newValue);newChildrenConsumerchildren 被调用之后的返回值,render 就是 childrennewValue 是从 Provider value 属性的赋值。

newProps

React Context源码是怎么实现的呢_第4张图片

newValue

React Context源码是怎么实现的呢_第5张图片

接下来看 readContext 的实现

相关参考视频讲解:进入学习

let lastContextDependency: ContextDependency | null = null;
let currentlyRenderingFiber: Fiber | null = null;
// 在 prepareToReadContext 函数
currentlyRenderingFiber = workInProgress;


export function readContext(
  context: ReactContext,
  observedBits: void | number | boolean,
): T {
    let contextItem = {
      context: ((context: any): ReactContext),
      observedBits: resolvedObservedBits,
      next: null,
    };

    if (lastContextDependency === null) {
      // This is the first dependency for this component. Create a new list.
      lastContextDependency = contextItem;
      currentlyRenderingFiber.contextDependencies = {
        first: contextItem,
        expirationTime: NoWork,
      };
    } else {
      // Append a new context item.
      lastContextDependency = lastContextDependency.next = contextItem;
    }
  }

  // isPrimaryRenderer 为 true,定义的就是 true
  // 实际就是一直会返回  context._currentValue
  return isPrimaryRenderer ? context._currentValue : context._currentValue2;
}

跳过中间,最后一句 return context._currentValue,而

就把顶层传下来的 context 的值取到了

context 为什么从上层可以一直往下面传这点现在还没有看懂,后面熟悉跨组件传递的实现之后再写一篇文章解释,囧。

Context 的设计非常特别

Provider Consumer 是 context 的两个属性。

  var context = {
    ?typeof: REACT_CONTEXT_TYPE,
    _currentValue: defaultValue,
    _currentValue2: defaultValue,
    Provider: null,
    Consumer: null
  };

Provider?typeofREACT_PROVIDER_TYPE,它带有一个 _context 属性,指向的就是 context 本身,也就是自己的儿子有一个属性指向自己!!!

  context.Provider = {
    ?typeof: REACT_PROVIDER_TYPE,
    _context: context
  };

Consumer?typeofREACT_CONTEXT_TYPE,它带也有一个 _context 属性,也是自己的儿子有一个属性指向自己!!!

  var Consumer = {
    ?typeof: REACT_CONTEXT_TYPE,
    _context: context,
    _calculateChangedBits: context._calculateChangedBits
  };

所以可以做一个猜想, Provider 的 value 属性赋予的新值肯定通过 _context 属性传到了 context 上,修改了 _currentValue。同样,Consumer 也是依据 _context 拿到了 context_currentValue,然后 render(newValue) 执行 children 函数。

useContext

useContext 是 react hooks 提供的一个功能,可以简化 context 值得获取。

下面看使用代码

import React, { useContext, createContext } from 'react'
const NameCtx = createContext({ name: 'yuny' })
function Title() {
  const { name } = useContext(NameCtx)
  return 

# {name}

} function App() { return ( </NameCtx.Provider> ) } export default App</code></pre> <p>我么初始值给的是 <code>{name: 'yuny'}</code>,实际又重新赋值 <code>{name: 'lxfriday'}</code>,最终页面显示的是 <code>lxfriday</code>。</p> <p><a href="http://img.e-com-net.com/image/info9/5b8f3e50bb86495893794200eb1ac4ab.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info9/5b8f3e50bb86495893794200eb1ac4ab.jpg" alt="" title="" loading="lazy" width="650" height="81"></a></p> <h3>useContext 相关源码</h3> <p>先看看 <strong>react</strong> 包中导出的 <code>useContext</code></p> <pre><code class="javascript">/** * useContext * @param Context {ReactContext} createContext 返回的结果 * @param unstable_observedBits {number | boolean | void} 计算新老 context 变化相关的,useContext() second argument is reserved for future * @returns {*} 返回的是 context 的值 */ export function useContext<T>( Context: ReactContext<T>, unstable_observedBits: number | boolean | void, ) { const dispatcher = resolveDispatcher(); return dispatcher.useContext(Context, unstable_observedBits); }</code></pre> <pre><code class="csharp">// Invalid hook call. Hooks can only be called inside of the body of a function component. function resolveDispatcher() { const dispatcher = ReactCurrentDispatcher.current; return dispatcher; }</code></pre> <pre><code class="javascript">/** * Keeps track of the current dispatcher. */ const ReactCurrentDispatcher = { /** * @internal * @type {ReactComponent} */ current: (null: null | Dispatcher), };</code></pre> <p>看看 <code>Dispatcher</code>,都是和 React Hooks 相关的。</p> <p><a href="http://img.e-com-net.com/image/info9/9c5770fa00b241cc87800a2870b59e78.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info9/9c5770fa00b241cc87800a2870b59e78.jpg" alt="React Context源码是怎么实现的呢_第6张图片" title="" loading="lazy" width="650" height="672" style="border:1px solid black;"></a></p> <p>再到 <strong>react-reconciler/src/ReactFiberHooks.js</strong> 中,有 <code>HooksDispatcherOnMountInDEV</code> 和 <code>HooksDispatcherOnMount</code>,带 <code>InDEV</code> 的应该是在 <code>development</code> 环境会使用到的,不带的是在 `production 会使用到。</p> <pre><code class="yaml">const HooksDispatcherOnMount: Dispatcher = { readContext, useCallback: mountCallback, useContext: readContext, useEffect: mountEffect, useImperativeHandle: mountImperativeHandle, useLayoutEffect: mountLayoutEffect, useMemo: mountMemo, useReducer: mountReducer, useRef: mountRef, useState: mountState, useDebugValue: mountDebugValue, }; HooksDispatcherOnMountInDEV = { // ... useContext<T>( context: ReactContext<T>, observedBits: void | number | boolean, ): T { return readContext(context, observedBits); }, }</code></pre> <p>在上面 <code>useContext</code> 经过 <code>readContext</code> 返回了 context 的值,<code>readContext</code> 在上面有源码介绍。</p> <h3>debugger 查看调用栈</h3> <p>初始的 <code>useContext</code></p> <p><a href="http://img.e-com-net.com/image/info9/8f545fbe804946a5bd89213b967b860d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info9/8f545fbe804946a5bd89213b967b860d.jpg" alt="React Context源码是怎么实现的呢_第7张图片" title="" loading="lazy" width="650" height="164" style="border:1px solid black;"></a></p> <p>在 <code>HooksDispatcherOnMountInDEV</code> 中</p> <p><a href="http://img.e-com-net.com/image/info9/f2c5944daa1845a5bba2ff9527773052.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info9/f2c5944daa1845a5bba2ff9527773052.jpg" alt="React Context源码是怎么实现的呢_第8张图片" title="" loading="lazy" width="650" height="325" style="border:1px solid black;"></a></p> <p><code>readContext</code> 中</p> <p><a href="http://img.e-com-net.com/image/info9/ca231c1652ab445a8c7c7b4f8f9cbde8.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info9/ca231c1652ab445a8c7c7b4f8f9cbde8.jpg" alt="React Context源码是怎么实现的呢_第9张图片" title="" loading="lazy" width="650" height="292" style="border:1px solid black;"></a></p> <p>经过上面源码的详细分析, 大家对 context 的创建和 context 取值应该了解了,context 设计真的非常妙!!</p> </article> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1597726892960546816"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(react.js)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1830646621059248128.htm" title="react.js" target="_blank">react.js</a> <span class="text-muted">涔溪</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>一、create-react-app全局安装create-react-app$npminstall-gcreate-react-app创建一个项目$create-react-appyour-app注意命名方式CreatinganewReactappin/dir/your-app.Installingpackages.Thismighttakeacoupleofminutes.安装过程较慢,Inst</div> </li> <li><a href="/article/1828080032459878400.htm" title="React.js如何使用Bootstrap" target="_blank">React.js如何使用Bootstrap</a> <span class="text-muted">Vesper63</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>在React.js项目中使用Bootstrap有多种方法,主要包括直接引入BootstrapCSS文件和使用ReactBootstrap库。下面将详细介绍这两种方法。方法一:直接引入BootstrapCSS文件这是最简单的方式,只需在项目中引入Bootstrap的CSS文件即可。安装Bootstrap:你可以通过npm或yarn安装Bootstrap:npminstallbootstrap或者:y</div> </li> <li><a href="/article/1759950762793857024.htm" title="react起源" target="_blank">react起源</a> <span class="text-muted">lemmo</span> <div>简介React(有时叫React.js或ReactJS),是一个为数据提供渲染为HTML视图的开源JavaScript库。React视图通常采用包含以自定义HTML标记规定的其他组件的组件渲染。React为程序员提供了一种子组件不能直接影响外层组件("dataflowsdown")的模型,数据改变时对HTML文档的有效更新,和现代单页应用中组件之间干净的分离。它由Facebook、Instagra</div> </li> <li><a href="/article/1759892840671965184.htm" title="2024前端面试准备之uniapp篇" target="_blank">2024前端面试准备之uniapp篇</a> <span class="text-muted">前端fighter</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>全文链接!!!!!!!1.UniApp和其他跨平台框架(如ReactNative、Flutter)有什么区别?语言和技术栈:UniApp使用Vue.js作为开发语言和技术栈,而ReactNative使用React.js,Flutter使用Dart语言。开发者可以根据自己的技术背景和偏好选择合适的框架。性能和体验:UniApp的性能和用户体验相对较好,因为它使用原生渲染技术,可以实现更接近原生应用的</div> </li> <li><a href="/article/1759629324341833728.htm" title="快速创建react项目." target="_blank">快速创建react项目.</a> <span class="text-muted">River_tong</span> <div>react简介说起react,我相信大家都对它有一定的了解,react目前是前端界非常流行的一个框架了,react它产生了很多相关的技术,比如:我们常说的react.js,我们可以用react语法来编写一些网页版应用,reactnative这门技术使得我们可以用react语法来编写原生应用,reactVR可以借助react的语法来编写一些VR相关的应用或者说全景视图这样的应用。react开发环境搭</div> </li> <li><a href="/article/1759403284218589184.htm" title="Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)" target="_blank">Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/vim%E5%89%8D%E7%AB%AF/1.htm">vim前端</a> <div>本系列文章md笔记(已分享)主要讨论vue相关知识。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。Vue.js是一个构建数据驱动的web界面的渐进式框架,Vue.js的目标是通过尽可能简单的API实</div> </li> <li><a href="/article/1759401029595639808.htm" title="Vue 与 React 比较,十年恩怨情仇整理" target="_blank">Vue 与 React 比较,十年恩怨情仇整理</a> <span class="text-muted"></span> <div>过去的十年里,出现了许多令人兴奋的前端技术。其中,最为亮眼的当属Vue.js和React.js,他们一经出世就备受前端开发者的欢迎,当然,流行框架之间的比较也从未停止。本文将从思否社区中出现的第一篇Vue.jsvs.React.js技术比较文章开始,回顾这两位在开发者们眼中的明星框架,十年间都发生了哪些变化。本文不只是技术的对比分析,更是对那些年我们一起追过的框架的致敬。让我们从头再来一次,感受V</div> </li> <li><a href="/article/1757098127510224896.htm" title="什么是VUE?" target="_blank">什么是VUE?</a> <span class="text-muted">最爱喝龙井</span> <div>什么是Vue.jsVue.js是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也是可以用于进行手机App开发的,需要借助于Weex)Vue.js是前端的主流框架之一,和Angular.js、React.js一起,并成为前端三大主流框架!Vue.js是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整</div> </li> <li><a href="/article/1756897967672934400.htm" title="常见的web前端开发框架:Bootstrap" target="_blank">常见的web前端开发框架:Bootstrap</a> <span class="text-muted">钟念</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6/1.htm">前端开发框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>常见的Web前端开发框架包括Bootstrap、Vue.js、React.js、Angular.js等。每个框架都有其独特的特点和优势,开发者可以根据项目的需求和个人的喜好来选择合适的框架。同时,随着技术的不断发展,新的框架和工具也会不断涌现,为Web前端开发带来更多的选择和可能性。下面将对Bootstrap框架进行简要介绍,包括它们的特点、使用方法和一些示例代码。Bootstrap基本概念:Bo</div> </li> <li><a href="/article/1756897968931225600.htm" title="常见的web前端开发框架:Vue.js" target="_blank">常见的web前端开发框架:Vue.js</a> <span class="text-muted">钟念</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6/1.htm">前端开发框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a> <div>常见的Web前端开发框架包括Bootstrap、Vue.js、React.js、Angular.js等。每个框架都有其独特的特点和优势,开发者可以根据项目的需求和个人的喜好来选择合适的框架。同时,随着技术的不断发展,新的框架和工具也会不断涌现,为Web前端开发带来更多的选择和可能性。下面将对Vue.js框架进行简要介绍,包括它们的特点、使用方法和一些示例代码。Vue.js基本概念:Vue.js是一</div> </li> <li><a href="/article/1756897969937858560.htm" title="常见的web前端开发框架:React.js" target="_blank">常见的web前端开发框架:React.js</a> <span class="text-muted">钟念</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6/1.htm">前端开发框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>常见的Web前端开发框架包括Bootstrap、Vue.js、React.js、Angular.js等。每个框架都有其独特的特点和优势,开发者可以根据项目的需求和个人的喜好来选择合适的框架。同时,随着技术的不断发展,新的框架和工具也会不断涌现,为Web前端开发带来更多的选择和可能性。下面将对React.js框架进行简要介绍,包括它们的特点、使用方法和一些示例代码。React.jsReact.js是</div> </li> <li><a href="/article/1756897837745979392.htm" title="常见的web前端开发框架:Angular.js" target="_blank">常见的web前端开发框架:Angular.js</a> <span class="text-muted">钟念</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6/1.htm">前端开发框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/angular.js/1.htm">angular.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>常见的Web前端开发框架包括Bootstrap、Vue.js、React.js、Angular.js等。每个框架都有其独特的特点和优势,开发者可以根据项目的需求和个人的喜好来选择合适的框架。同时,随着技术的不断发展,新的框架和工具也会不断涌现,为Web前端开发带来更多的选择和可能性。下面将对Angular.js框架进行简要介绍,包括它们的特点、使用方法和一些示例代码。Angular.js基本概念:</div> </li> <li><a href="/article/1756617175155621888.htm" title="Vue 与 React 比较,十年恩怨情仇整理" target="_blank">Vue 与 React 比较,十年恩怨情仇整理</a> <span class="text-muted"></span> <div>过去的十年里,出现了许多令人兴奋的前端技术。其中,最为亮眼的当属Vue.js和React.js,他们一经出世就备受前端开发者的欢迎,当然,流行框架之间的比较也从未停止。本文将从思否社区中出现的第一篇Vue.jsvs.React.js技术比较文章开始,回顾这两位在开发者们眼中的明星框架,十年间都发生了哪些变化。本文不只是技术的对比分析,更是对那些年我们一起追过的框架的致敬。让我们从头再来一次,感受V</div> </li> <li><a href="/article/1755191676357328896.htm" title="新书速览 | React.js+Node.js+MongoDB企业级全栈开发实践" target="_blank">新书速览 | React.js+Node.js+MongoDB企业级全栈开发实践</a> <span class="text-muted">全栈开发圈</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>详解React.js全家桶及其结合Node.js、MongoDB进行全栈开发的方法实战企业级应用系统项目开发本书内容本书系统介绍Web应用全栈开发技术,通过一个真实的企业项目,讲解如何使用React全家桶以及Node.js、MongoDB进行全栈开发,帮助开发人员快速积累开发经验,全面掌握开发技巧。读完本书相当于真实参与一个完整的全栈项目开发。本书配套示例项目源代码。本书共分27章,内容包括开发环</div> </li> <li><a href="/article/1754735265894645760.htm" title="React 与 Angular:项目的最佳框架" target="_blank">React 与 Angular:项目的最佳框架</a> <span class="text-muted">千源万码</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/angular.js/1.htm">angular.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>什么是React?React或React.js是一个基于JavaScript的前端库,可帮助创建用户界面(UI)。它以声明式编程风格描绘UI状态。通过React,程序员可以掌握应用程序在开发后将如何呈现给用户以及他们将如何与用户交互。尽管React以开发Web应用程序而闻名,但它也有助于构建移动应用程序和本机呈现的应用程序。Facebook、Instagram、Netflix和纽约时报等全球公司在</div> </li> <li><a href="/article/1754340238215364608.htm" title="web 技术栈有哪些?" target="_blank">web 技术栈有哪些?</a> <span class="text-muted">老马啸西风</span> <a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>前端技术栈:HTML(超文本标记语言):用于创建网页结构的标记语言,定义页面的内容和结构。CSS(层叠样式表):用于设计和排版网页的样式表语言,负责页面的外观和样式。JavaScript:一种脚本语言,用于在浏览器中实现动态交互和客户端逻辑。常用的前端框架和库如React、Vue、Angular等,可以加速开发。前端框架和库:React.js、Vue.js、Angular等,用于简化和加速前端开发</div> </li> <li><a href="/article/1754304108208078848.htm" title="DataBinding使用详解-Google官方的视图绑定" target="_blank">DataBinding使用详解-Google官方的视图绑定</a> <span class="text-muted">ZhangQiang-</span> <a class="tag" taget="_blank" href="/search/%5BAndroid%E8%BF%9B%E9%98%B6%5D/1.htm">[Android进阶]</a> <div>几年前,数据绑定在便已在前端界风生水起,Angular.js、React.js、vue.js等热门前端框架都具备这种能力。Android端的开源库butterknife/Anotation/dragger2等等也非常好用且广受支持;数据绑定简单来说,就是通过某种机制,把代码中的数据和xml(UI)绑定起来,双方都能对数据进行操作,并且在数据发生变化的时候,自动刷新数据。在2015年的谷歌IO大会上</div> </li> <li><a href="/article/1754135698736168960.htm" title="LLM应用开发与落地:使用gradio十分钟搭建聊天UI" target="_blank">LLM应用开发与落地:使用gradio十分钟搭建聊天UI</a> <span class="text-muted">前行的七哥</span> <a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>一、背景如果你是做LLM应用开发的,特别是做后端开发,你一定会遇到怎么快速写一个聊天UI界面来调试prompt或agent的问题。这时候的你可能在苦恼中,毕竟react.js,next.js,css,html也不是每个人都那么熟练,对吧?即使你是做前端开发的,你也可以尝试一下Gradio,哪天有人给你提了一个调试界面的需求,原本要半天的工作现在只需要十分钟了,多余的时机用来学习或享受生活,多美(或</div> </li> <li><a href="/article/1753035361233158144.htm" title="通过 React 来构建界面" target="_blank">通过 React 来构建界面</a> <span class="text-muted">张培跃吧</span> <a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>1-通过React来构建界面第1步:下载所需要的二个库文件至本地,如果需要加载指定版本的react和react-dom,可以把18替换成所需加载的版本号。react.js:React中的核心库文件。//开发版https://unpkg.com/react@18/umd/react.development.js//生产版https://unpkg.com/react@18/umd/react.pro</div> </li> <li><a href="/article/1752156807041662976.htm" title="如何在 React 中使用 Sass" target="_blank">如何在 React 中使用 Sass</a> <span class="text-muted">网络研究院</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%A0%94%E7%A9%B6%E9%99%A2/1.htm">网络研究院</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/sass/1.htm">sass</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a> <div>Sass(语法很棒的样式表)是CSS的扩展,具有使其更强大的附加功能。Sass最好的一点是它与CSS的兼容性,这意味着您可以在Web开发项目中使用React等JavaScript框架。然而,与普通CSS不同,您需要进行一些设置才能使用Sass。通过设置一个简单的React.js项目并将Sass与其集成来了解其工作原理。如何在React.js项目中使用Sass与其他CSS处理器一样,React本身并</div> </li> <li><a href="/article/1751983156120010752.htm" title="js获取今天剩余时间_前端教程丨手把手教你用 Next.js 搭建个人博客,从入门到吃鸡" target="_blank">js获取今天剩余时间_前端教程丨手把手教你用 Next.js 搭建个人博客,从入门到吃鸡</a> <span class="text-muted">weixin_39610774</span> <a class="tag" taget="_blank" href="/search/js%E8%8E%B7%E5%8F%96%E4%BB%8A%E5%A4%A9%E5%89%A9%E4%BD%99%E6%97%B6%E9%97%B4/1.htm">js获取今天剩余时间</a><a class="tag" taget="_blank" href="/search/%E7%94%A8/1.htm">用</a><a class="tag" taget="_blank" href="/search/js%E5%88%A4%E6%96%AD/1.htm">js判断</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E4%B8%AA%E6%95%B0%E6%98%AF%E5%90%A6%E6%98%AF%E7%B4%A0%E6%95%B0%28%E8%B4%A8%E6%95%B0%29/1.htm">一个数是否是素数(质数)</a> <div>React.js是现今前端最火的应用框架之一,而Next.js正是React.js领域最优秀的服务端渲染框架之一。基本上,现在所有的前端主流形式,从服务端渲染APP,静态站到桌面应用等,Next.js都能胜任。不论是国内还是国外,都有不少开发者和企业在使用Next.js开发网站,比如:腾讯新闻移动端门口站腾讯网大名顶顶的Hulu视频站世界最受欢迎的ReactUI组件库Material-UI魅族官网</div> </li> <li><a href="/article/1751982897977376768.htm" title="前端教程丨手把手教你用 Next.js 搭建个人博客,从入门到吃鸡" target="_blank">前端教程丨手把手教你用 Next.js 搭建个人博客,从入门到吃鸡</a> <span class="text-muted">蓝桥云课</span> <a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/reactjs/1.htm">reactjs</a> <div>React.js是现今前端最火的应用框架之一,而**Next.js正是React.js领域最优秀的服务端渲染框架之一。**基本上,现在所有的前端主流形式,从服务端渲染APP,静态站到桌面应用等,Next.js都能胜任。不论是国内还是国外,都有不少开发者和企业在使用Next.js开发网站,比如:腾讯新闻移动端门口站腾讯网大名顶顶的Hulu视频站世界最受欢迎的ReactUI组件库Material-UI</div> </li> <li><a href="/article/1751982513158373376.htm" title="【前端教程】手把手教你用 Next.js 搭建个人博客,从入门到吃鸡!" target="_blank">【前端教程】手把手教你用 Next.js 搭建个人博客,从入门到吃鸡!</a> <span class="text-muted">实验楼v</span> <div>React.js是现今前端最火的应用框架之一,而Next.js正是React.js领域最优秀的服务端渲染框架之一。基本上,现在所有的前端主流形式,从服务端渲染APP,静态站到桌面应用等,Next.js都能胜任。不论是国内还是国外,都有不少开发者和企业在使用Next.js开发网站,比如:腾讯新闻移动端门口站腾讯网大名顶顶的Hulu视频站世界最受欢迎的ReactUI组件库Material-UI魅族官网</div> </li> <li><a href="/article/1750115808266174464.htm" title="React-9:通过路由实现排序切换" target="_blank">React-9:通过路由实现排序切换</a> <span class="text-muted">kino2046</span> <div>queryString(查询字符串)通常我们把URL`?`后面的内容称为queryString,在React.js中,我们可以通过`this.props.location.search`来获取,它的值是字符串,格式为:?k1=v1&k2=v2,为了方便操作,我们把它转成对象形式URLSearchParams在原生JJavaScript中内置了一个URLSearchParams的类,我们通过它可以很</div> </li> <li><a href="/article/1749663567096856576.htm" title="构建高效外卖系统:技术实践与代码示例" target="_blank">构建高效外卖系统:技术实践与代码示例</a> <span class="text-muted">万岳科技系统开发</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a> <div>外卖系统在现代社会中扮演着重要的角色,为用户提供了便捷的用餐解决方案。在这篇文章中,我们将探讨构建高效外卖系统的技术实践,同时提供一些基础的代码示例,帮助开发者更好地理解和应用这些技术。1.技术栈选择构建外卖系统首先需要选择合适的技术栈。以下是一个简单的技术栈示例:前端:React.js后端:Node.js数据库:MongoDB实时通信:WebSocket云服务:AWS或Azure2.用户认证与授</div> </li> <li><a href="/article/1749324305847566336.htm" title="React.js快速入门教程" target="_blank">React.js快速入门教程</a> <span class="text-muted">heiyay</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>介绍React.js是一个由Facebook开发的用于构建用户界面的JavaScript库。它主要用于构建单页面应用程序(SPA),可以轻松地创建交互性强、快速响应的用户界面。React.js的特点1.声明式设计−React采用声明范式,可以轻松描述应用。2.高效−React通过对DOM的模拟,最大限度地减少与DOM的交互。3.灵活−React可以与已知的库或框架很好地配合。4.JSX−JSX是J</div> </li> <li><a href="/article/1747414643418087424.htm" title="useRef钩子大法好!" target="_blank">useRef钩子大法好!</a> <span class="text-muted">今天也想MK代码</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>在React.js中,useRef是一个钩子,允许你创建一个对元素或值的可变引用。与useState钩子不同,更新useRef不会触发组件的重新渲染。它通常用于直接访问和管理DOM元素,存储持久值,或处理不应触发重新渲染的值。useRef的基本语法如下:constrefContainer=useRef(initialValue);useRef的主要用途1.访问DOM元素useRef的一个最常见的用</div> </li> <li><a href="/article/1746103789431046144.htm" title="Vue.js 学习Day1" target="_blank">Vue.js 学习Day1</a> <span class="text-muted">cf6d95617c55</span> <div>Vue.js-Day1课程介绍前5天:都在学习Vue基本的语法和概念;打包工具Webpack,Gulp后5天:以项目驱动教学;什么是Vue.jsVue.js是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也是可以用于进行手机App开发的,需要借助于Weex)Vue.js是前端的主流框架之一,和Angular.js、React.js</div> </li> <li><a href="/article/1745787485834723328.htm" title="【React.js 06】Redux基础知识" target="_blank">【React.js 06】Redux基础知识</a> <span class="text-muted">IUVO</span> <div>Redux是一个专注于状态管理的库,和React是解耦的,用Angular和Vue都可以使用Redux。其具有一个单一状态,单向数据流的特性。Redux概念redux有一个store,记录所有的state,state要改变的时候,就通知dispatch去执行action,reducer拿到state和action去生成新的state,store.subscribe根据新的state重新渲染出改变后</div> </li> <li><a href="/article/1744937354797268992.htm" title="前端八股文系列(七) React 面试专题" target="_blank">前端八股文系列(七) React 面试专题</a> <span class="text-muted">微莱羽墨</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>文章目录React面试专题React.js是MVVM框架吗?hooks用过吗?聊聊react中class组件和函数组件的区别React组件通信方式1)父组件向子组件通信2)子组件向父组件通信3)跨级组件通信4)非嵌套关系的组件通信setState既存在异步情况也存在同步情况生命周期说一下react-fiber1)背景2)实现原理Portals何时要使用异步组件?如和使用异步组件React事件绑定原</div> </li> <li><a href="/article/10.htm" title="jsonp 常用util方法" target="_blank">jsonp 常用util方法</a> <span class="text-muted">hw1287789687</span> <a class="tag" taget="_blank" href="/search/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/jsonp%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95/1.htm">jsonp常用方法</a><a class="tag" taget="_blank" href="/search/jsonp+callback/1.htm">jsonp callback</a> <div>jsonp 常用java方法 (1)以jsonp的形式返回:函数名(json字符串) /*** * 用于jsonp调用 * @param map : 用于构造json数据 * @param callback : 回调的javascript方法名 * @param filters : <code>SimpleBeanPropertyFilter theFilt</div> </li> <li><a href="/article/137.htm" title="多线程场景" target="_blank">多线程场景</a> <span class="text-muted">alafqq</span> <a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div>0 能不能简单描述一下你在java web开发中需要用到多线程编程的场景?0 对多线程有些了解,但是不太清楚具体的应用场景,能简单说一下你遇到的多线程编程的场景吗? Java多线程 2012年11月23日 15:41 Young9007 Young9007 4 0 0 4 Comment添加评论关注(2) 3个答案 按时间排序 按投票排序 0 0 最典型的如: 1、</div> </li> <li><a href="/article/264.htm" title="Maven学习——修改Maven的本地仓库路径" target="_blank">Maven学习——修改Maven的本地仓库路径</a> <span class="text-muted">Kai_Ge</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>      安装Maven后我们会在用户目录下发现.m2 文件夹。默认情况下,该文件夹下放置了Maven本地仓库.m2/repository。所有的Maven构件(artifact)都被存储到该仓库中,以方便重用。但是windows用户的操作系统都安装在C盘,把Maven仓库放到C盘是很危险的,为此我们需要修改Maven的本地仓库路径。    </div> </li> <li><a href="/article/391.htm" title="placeholder的浏览器兼容" target="_blank">placeholder的浏览器兼容</a> <span class="text-muted">120153216</span> <a class="tag" taget="_blank" href="/search/placeholder/1.htm">placeholder</a> <div>【前言】 自从html5引入placeholder后,问题就来了, 不支持html5的浏览器也先有这样的效果, 各种兼容,之前考虑,今天测试人员逮住不放, 想了个解决办法,看样子还行,记录一下。   【原理】 不使用placeholder,而是模拟placeholder的效果, 大概就是用focus和focusout效果。   【代码】 <scrip</div> </li> <li><a href="/article/518.htm" title="debian_用iso文件创建本地apt源" target="_blank">debian_用iso文件创建本地apt源</a> <span class="text-muted">2002wmj</span> <a class="tag" taget="_blank" href="/search/Debian/1.htm">Debian</a> <div>1.将N个debian-506-amd64-DVD-N.iso存放于本地或其他媒介内,本例是放在本机/iso/目录下 2.创建N个挂载点目录 如下: debian:~#mkdir –r /media/dvd1 debian:~#mkdir –r /media/dvd2 debian:~#mkdir –r /media/dvd3 …. debian:~#mkdir –r /media</div> </li> <li><a href="/article/645.htm" title="SQLSERVER耗时最长的SQL" target="_blank">SQLSERVER耗时最长的SQL</a> <span class="text-muted">357029540</span> <a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a> <div>对于DBA来说,经常要知道存储过程的某些信息: 1.   执行了多少次 2.   执行的执行计划如何 3.   执行的平均读写如何 4.   执行平均需要多少时间 列名          &</div> </li> <li><a href="/article/772.htm" title="com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil" target="_blank">com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>今天eclipse突然报了com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil 错误,并且工程文件打不开了,在网上找了一下资料,然后按照方法操作了一遍,好了,解决方法如下: 错误提示信息: An error has occurred.See error log for more details. Reason: com/genuitec/</div> </li> <li><a href="/article/899.htm" title="用正则删除文本中的html标签" target="_blank">用正则删除文本中的html标签</a> <span class="text-muted">adminjun</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E5%8E%BB%E6%8E%89html%E6%A0%87%E7%AD%BE/1.htm">去掉html标签</a> <div>使用文本编辑器录入文章存入数据中的文本是HTML标签格式,由于业务需要对HTML标签进行去除只保留纯净的文本内容,于是乎Java实现自动过滤。 如下: public static String Html2Text(String inputString) { String htmlStr = inputString; // 含html标签的字符串 String textSt</div> </li> <li><a href="/article/1026.htm" title="嵌入式系统设计中常用总线和接口" target="_blank">嵌入式系统设计中常用总线和接口</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/linux+%E5%9F%BA%E7%A1%80/1.htm">linux 基础</a> <div>               嵌入式系统设计中常用总线和接口         任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线</div> </li> <li><a href="/article/1153.htm" title="Java函数调用方式——按值传递" target="_blank">Java函数调用方式——按值传递</a> <span class="text-muted">ayaoxinchao</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%8C%89%E5%80%BC%E4%BC%A0%E9%80%92/1.htm">按值传递</a><a class="tag" taget="_blank" href="/search/%E5%AF%B9%E8%B1%A1/1.htm">对象</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/1.htm">基础数据类型</a> <div>Java使用按值传递的函数调用方式,这往往使我感到迷惑。因为在基础数据类型和对象的传递上,我就会纠结于到底是按值传递,还是按引用传递。其实经过学习,Java在任何地方,都一直发挥着按值传递的本色。   首先,让我们看一看基础数据类型是如何按值传递的。   public static void main(String[] args) { int a = 2; </div> </li> <li><a href="/article/1280.htm" title="ios音量线性下降" target="_blank">ios音量线性下降</a> <span class="text-muted">bewithme</span> <a class="tag" taget="_blank" href="/search/ios%E9%9F%B3%E9%87%8F/1.htm">ios音量</a> <div>直接上代码吧   //second 几秒内下降为0 - (void)reduceVolume:(int)second { KGVoicePlayer *player = [KGVoicePlayer defaultPlayer]; if (!_flag) { _tempVolume = player.volume; </div> </li> <li><a href="/article/1407.htm" title="与其怨它不如爱它" target="_blank">与其怨它不如爱它</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E9%80%89%E6%8B%A9/1.htm">选择</a><a class="tag" taget="_blank" href="/search/%E7%90%86%E6%83%B3/1.htm">理想</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E4%B8%9A/1.htm">职业</a><a class="tag" taget="_blank" href="/search/%E8%A7%84%E5%88%92/1.htm">规划</a> <div>        抱怨工作是年轻人的常态,但爱工作才是积极的心态,与其怨它不如爱它。         一般来说,在公司干了一两年后,不少年轻人容易产生怨言,除了具体的埋怨公司“扭门”,埋怨上司无能以外,也有许多人是因为根本不爱自已的那份工作,工作完全成了谋生的手段,跟自已的性格、专业、爱好都相差甚远。   </div> </li> <li><a href="/article/1534.htm" title="一边时间不够用一边浪费时间" target="_blank">一边时间不够用一边浪费时间</a> <span class="text-muted">bingyingao</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4/1.htm">时间</a><a class="tag" taget="_blank" href="/search/%E6%B5%AA%E8%B4%B9/1.htm">浪费</a> <div>一方面感觉时间严重不够用,另一方面又在不停的浪费时间。 每一个周末,晚上熬夜看电影到凌晨一点,早上起不来一直睡到10点钟,10点钟起床,吃饭后玩手机到下午一点。 精神还是很差,下午像一直野鬼在城市里晃荡。 为何不尝试晚上10点钟就睡,早上7点就起,时间完全是一样的,把看电影的时间换到早上,精神好,气色好,一天好状态。 控制让自己周末早睡早起,你就成功了一半。 有多少个工作</div> </li> <li><a href="/article/1661.htm" title="【Scala八】Scala核心二:隐式转换" target="_blank">【Scala八】Scala核心二:隐式转换</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>Implicits work like this: if you call a method on a Scala object, and the Scala compiler does not see a definition for that method in the class definition for that object, the compiler will try to con</div> </li> <li><a href="/article/1788.htm" title="sudoku slover in Haskell (2)" target="_blank">sudoku slover in Haskell (2)</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a><a class="tag" taget="_blank" href="/search/sudoku/1.htm">sudoku</a> <div>继续精简haskell版的sudoku程序,稍微改了一下,这次用了8行,同时性能也提高了很多,对每个空格的所有解不是通过尝试算出来的,而是直接得出。   board = [0,3,4,1,7,0,5,0,0, 0,6,0,0,0,8,3,0,1, 7,0,0,3,0,0,0,0,6, 5,0,0,6,4,0,8,0,7, </div> </li> <li><a href="/article/1915.htm" title="Java-Collections Framework学习与总结-HashSet和LinkedHashSet" target="_blank">Java-Collections Framework学习与总结-HashSet和LinkedHashSet</a> <span class="text-muted">BrokenDreams</span> <a class="tag" taget="_blank" href="/search/linkedhashset/1.htm">linkedhashset</a> <div>        本篇总结一下两个常用的集合类HashSet和LinkedHashSet。         它们都实现了相同接口java.util.Set。Set表示一种元素无序且不可重复的集合;之前总结过的java.util.List表示一种元素可重复且有序</div> </li> <li><a href="/article/2042.htm" title="读《研磨设计模式》-代码笔记-备忘录模式-Memento" target="_blank">读《研磨设计模式》-代码笔记-备忘录模式-Memento</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ import java.util.ArrayList; import java.util.List; /* * 备忘录模式的功能是,在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,为以后的状态恢复作“备忘” </div> </li> <li><a href="/article/2169.htm" title="《RAW格式照片处理专业技法》笔记" target="_blank">《RAW格式照片处理专业技法》笔记</a> <span class="text-muted">cherishLC</span> <a class="tag" taget="_blank" href="/search/PS/1.htm">PS</a> <div>注意,这不是教程!仅记录楼主之前不太了解的 一、色彩(空间)管理 作者建议采用ProRGB(色域最广),但camera raw中设为ProRGB,而PS中则在ProRGB的基础上,将gamma值设为了1.8(更符合人眼) 注意:bridge、camera raw怎么设置显示、输出的颜色都是正确的(会读取文件内的颜色配置文件),但用PS输出jpg文件时,必须先用Edit->conv</div> </li> <li><a href="/article/2296.htm" title="使用 Git 下载 Spring 源码 编译 for Eclipse" target="_blank">使用 Git 下载 Spring 源码 编译 for Eclipse</a> <span class="text-muted">crabdave</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>使用 Git 下载 Spring 源码 编译 for Eclipse   1、安装gradle,下载 http://www.gradle.org/downloads 配置环境变量GRADLE_HOME,配置PATH  %GRADLE_HOME%/bin,cmd,gradle -v   2、spring4 用jdk8 下载 https://jdk8.java.</div> </li> <li><a href="/article/2423.htm" title="mysql连接拒绝问题" target="_blank">mysql连接拒绝问题</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E7%99%BB%E5%BD%95%E6%9D%83%E9%99%90/1.htm">登录权限</a> <div>mysql中在其它机器连接mysql服务器时报错问题汇总 一、[running]root@192.168.9.136:~$mysql -uroot -h 192.168.9.108 -p   //带-p参数,在下一步进行密码输入 Enter password:    //无字符串输入 ERROR 1045 (28000): Access </div> </li> <li><a href="/article/2550.htm" title="Google Chrome 为何打压 H.264" target="_blank">Google Chrome 为何打压 H.264</a> <span class="text-muted">dsjt</span> <a class="tag" taget="_blank" href="/search/apple/1.htm">apple</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a> <div>Google 今天在 Chromium 官方博客宣布由于 H.264 编解码器并非开放标准,Chrome 将在几个月后正式停止对 H.264 视频解码的支持,全面采用开放的 WebM 和 Theora 格式。 Google 在博客上表示,自从 WebM 视频编解码器推出以后,在性能、厂商支持以及独立性方面已经取得了很大的进步,为了与 Chromium 现有支持的編解码器保持一致,Chrome</div> </li> <li><a href="/article/2677.htm" title="yii 获取控制器名 和方法名" target="_blank">yii 获取控制器名 和方法名</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a> <div>1. 获取控制器名 在控制器中获取控制器名:  $name = $this->getId(); 在视图中获取控制器名:    $name = Yii::app()->controller->id;    2. 获取动作名  在控制器beforeAction()回调函数中获取动作名:  $name = </div> </li> <li><a href="/article/2804.htm" title="Android知识总结(二)" target="_blank">Android知识总结(二)</a> <span class="text-muted">come_for_dream</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>明天要考试了,速速总结如下   1、Activity的启动模式        standard:每次调用Activity的时候都创建一个(可以有多个相同的实例,也允许多个相同Activity叠加。)        singleTop:可以有多个实例,但是不允许多个相同Activity叠加。即,如果Ac</div> </li> <li><a href="/article/2931.htm" title="高洛峰收徒第二期:寻找未来的“技术大牛” ——折腾一年,奖励20万元" target="_blank">高洛峰收徒第二期:寻找未来的“技术大牛” ——折腾一年,奖励20万元</a> <span class="text-muted">gcq511120594</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a> <div>高洛峰,兄弟连IT教育合伙人、猿代码创始人、PHP培训第一人、《细说PHP》作者、软件开发工程师、《IT峰播》主创人、PHP讲师的鼻祖! 首期现在的进程刚刚过半,徒弟们真的很棒,人品都没的说,团结互助,学习刻苦,工作认真积极,灵活上进。我几乎会把他们全部留下来,现在已有一多半安排了实际的工作,并取得了很好的成绩。等他们出徒之日,凭他们的能力一定能够拿到高薪,而且我还承诺过一个徒弟,当他拿到大学毕</div> </li> <li><a href="/article/3058.htm" title="linux expect" target="_blank">linux expect</a> <span class="text-muted">heipark</span> <a class="tag" taget="_blank" href="/search/expect/1.htm">expect</a> <div>1. 创建、编辑文件go.sh   #!/usr/bin/expect spawn sudo su admin expect "*password*" { send "13456\r\n" } interact    2. 设置权限   chmod u+x go.sh  3.</div> </li> <li><a href="/article/3185.htm" title="Spring4.1新特性——静态资源处理增强" target="_blank">Spring4.1新特性——静态资源处理增强</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring+4.1/1.htm">spring 4.1</a> <div>目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异常处理 Spring4.1新特性——数据库集成测试脚本初始化 Spring4.1新特性——Spring MVC增强 Spring4.1新特性——页面自动化测试框架Spring MVC T</div> </li> <li><a href="/article/3312.htm" title="idea ubuntuxia 乱码" target="_blank">idea ubuntuxia 乱码</a> <span class="text-muted">liyonghui160com</span> <div>  1.首先需要在windows字体目录下或者其它地方找到simsun.ttf 这个 字体文件。 2.在ubuntu 下可以执行下面操作安装该字体: sudo mkdir /usr/share/fonts/truetype/simsun sudo cp simsun.ttf /usr/share/fonts/truetype/simsun fc-cache -f -v </div> </li> <li><a href="/article/3439.htm" title="改良程序的11技巧" target="_blank">改良程序的11技巧</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E5%B7%A7/1.htm">技巧</a> <div>有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你的代码 时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此,在编写时多花一点时间,你会在阅读它时节省大量的时间。   让我们看一些基本的编程技巧:   尽量保持方法简短 永远永远不要把同一个变量用于多个不同的</div> </li> <li><a href="/article/3566.htm" title="300个涵盖IT各方面的免费资源(下)——工作与学习篇" target="_blank">300个涵盖IT各方面的免费资源(下)——工作与学习篇</a> <span class="text-muted">shoothao</span> <a class="tag" taget="_blank" href="/search/%E5%88%9B%E4%B8%9A/1.htm">创业</a><a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9%E8%B5%84%E6%BA%90/1.htm">免费资源</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%AF%BE%E7%A8%8B/1.htm">学习课程</a><a class="tag" taget="_blank" href="/search/%E8%BF%9C%E7%A8%8B%E5%B7%A5%E4%BD%9C/1.htm">远程工作</a> <div>工作与生产效率:   A. 背景声音 Noisli:背景噪音与颜色生成器。 Noizio:环境声均衡器。 Defonic:世界上任何的声响都可混合成美丽的旋律。 Designers.mx:设计者为设计者所准备的播放列表。 Coffitivity:这里的声音就像咖啡馆里放的一样。 B. 避免注意力分散 Self Co</div> </li> <li><a href="/article/3693.htm" title="深入浅出RPC" target="_blank">深入浅出RPC</a> <span class="text-muted">uule</span> <a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a> <div>深入浅出RPC-浅出篇 深入浅出RPC-深入篇   RPC Remote Procedure Call Protocol 远程过程调用协议   它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>