Sym - 一个用 Java 实现的现代化社区平台 • 源码 • 注册

Pipe - 小而美的开源博客平台 • 体验 • 皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载 
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

0 篇文章

React 中的元素和组件有什么不同?

2019-02-25 回答元素是用来展现 DOM 节点或组件的一个普通 JavaScript 对象。元素是一个纯的,不需要进行状态变化且创建成本较低的对象。组件是一个方法或者类。组件可以有 state 并且可以将 props 作为输入然后返回一个元素的树形结构作为为输出(虽然他们可以表示一个通用的容器或包装器,但 DOM 的提交并不是必须的)。组件在生命周期的方法中可能会引起副作用(如 AJAX 请求,DOM 修改,第三方库的

状态提升在 React 中的作用

2019-02-26 回答当多个组件需要共享一些相同的数据时,建议将共享的状态提升到离这些组件最近的共同祖先上。例如,如果两个子组件共享了一些相同的数据,那么就建议将共享的状态移至他们的父组件,而不是在两个子组件中使用本地状态进行维护。加分回答状态提升示例:constscaleNames={c:'Celsius',f:'Fahrenheit'};functiontoCelsius(fahrenheit

React 中如何在 JSX 树中写注释

2019-02-27 回答注释必须包裹在 {} 中并且使用 /**/ 语法,如下所示:consttree=(<div>{/*Comment*/}<p>Text</p></div>)加分回答注释固然很重要, 但最好的代码应该就是文档本身。有意义的类型名和变量名, 要远胜于用注释去解释含糊不清的名字。注释应当解释代码为什么要这么做以及其目的。不要描述显而易见的现象,永远不要使用自然语言翻译代码作为注释,除非对高手来说

React 中什么是有状态的组件?

2019-02-28 回答有状态的组件是一种其行为取决于该状态的组件。这意味着在一个组件的两个实例中,即使给这两个实例赋予相同的属性,他们也不一定会有相同的渲染输出,这和纯函数组件不同。//StatefulclasscomponentclassAppextendsComponent{constructor(props){super(props)this.state={count:0}}render()

什么是无状态组件

2019-03-01 回答无状态组件是本身行为不需要依赖他自身状态的组件。无状态组件可以是函数组件或者类组件。无状态函数组件更易于维护和测试,因为他们可以保证在相同的属性下有相同的输出。当不需要使用生命周期钩子时,应该首先使用无状态函数组件。加分回答无状态组件不依赖他自身的状态。无状态组件可以是类组件或者函数组件。无状态函数组件可以完全避免使用 this 关键字。无状态组件有更高的性能。constComp

`setState` 使用回调函数作为参数的目的是什么?

2019-03-02 回答当 setState 执行完成且组件被渲染完成时,将调用回调函数。由于 setState 是异步的,因此下一步执行的任何操作都可以使用该回调函数。setState({name:"sudheer"},()=>{console.log("Thenamehasupdatedandcomponentre-rendered")}) 加分回答在 setState 完成后会调用回调函数,下一步需要执行的

为什么 React 要使用 className 来代替 HTML 中的 class?

2019-03-03 回答 React 一开始的理念是想与浏览器的 DOMAPI 保持一直而不是 HTML,因为这样会和元素的创建更为接近。在元素上设置 class 需要使用 className 这个 API:constelement=document.createElement("div")element.className="hello" 加分回答 ES5 之前,在对象中不能使用保留字。以下代码在 IE8 中将会抛出错误:co

key 是什么?列表中使用时有什么优点?

2019-03-04 回答 Keys 是一种特殊的字符串属性,可以帮助 React 识别哪些项已经被修改过、添加过或删除过。当渲染数组元素时就需要使用 key 来给每一个元素进行固定的标识。每一个元素的 key 必须是唯一的(例如,数据中的 IDs 或最终排序后的索引)。consttodoItems=todos.map(todo=><likey={todo.id}>{todo.text}</li>) 加分回答 Keys 为集合

NodeJS 回调的错误处理方式及其优点

2019-03-18 回答 NodeJS 通常使用回调模式,如果在执行期间发生错误,会把错误作为回调的第一个参数传递到回调函数中:fs.readFile(filePath,function(err,data){if(err){// 错误处理,return 可以让执行停止,这非常重要 returnconsole.log(err)}// 使用数据对象 console.log(data)}) 优点包括如下:如果不需要引用数

什么是 REST?

2019-03-19 回答 REST(REpresentationalStateTransfer)是一种用于网络架构的软件设计模式。RESTfulWeb 应用程序使用和资源相关的信息方式对数据进行公开。通常,这个概念用于管理 Web 应用程序中的状态。对于大多数应用程序来说,他们对数据都有读取,创建,更新和销毁这四个共同的操作。数据模块化后形成单独的表,如 posts,users,comments,RESTfu

如何避免地狱回调?

2019-03-20 提问如何避免以下这种地狱回调的情况?getData(function(a){getMoreData(a,function(b){getMoreData(b,function(c){getMoreData(c,function(d){getMoreData(d,function(e){//...})})})})}) 回答重构返回 promises 的函数,使用最佳的 async/await

什么是 Node.js 中的事件循环?

2019-03-21 回答事件循环处理所有的异步回调。回调在一个循环中进行排队,当代码运行时,队列中的每一个回调在接收到响应时将逐个进行运行。当 Node.js 启动时会初始化事件循环,每一个事件循环都有如下顺序的六个循环阶段:加分回答事件循环允许 Node.js 执行非阻塞的 I/O 操作,尽管 JavaScript 是单线程的。返回总目录 30 秒面试系列一

Adapter - ary

2019-03-23 描述创建一个最多接受 n 个参数的函数,他可以忽略任何多余的参数。提示参数 fn 为提供的函数,n 为函数最多接受的参数的个数,可使用 Array.prototype.slice(0,n) 和扩展运算符...。代码 constary=(fn,n)=>(...args)=>fn(...args.slice(0,n)); 示例依次获取长度不同的数组中的前 2 位中较大的值:constfirstTwoMax

Adapter - call

2019-03-24 描述根据输入的关键字和一组参数使返回的函数可以根据传入的参数去执行关键字方法。提示使用闭包调用传入的关键字和一组参数。使用柯里化函数。代码 constcall=(key,...args)=>context=>context[key](...args); 示例对数组进行计算并返回其结果:call('map',x=>2*x)([1,2,3])//[2,4,6]Promise.resolv

Adapter - collectInto

2019-03-25 描述将使用数组为参数的函数修改为使用可变参数的函数。提示接受该函数 fn 为参数并返回一个闭包函数闭包函数使用扩展运算符将所有输入作为数组传入 fn 函数中。代码 constcollectInto=fn=>(...args)=>fn(args); 示例对多个异步请求的返回进行输出处理:constp1=Promise.resolve(1);constp2=newPromise(resolve=

Adapter - flip

2019-03-26 描述使用函数作为参数,然后将该函数的第一个参数作为最后一个参数。提示使用扩展运算符接受第二个及以后的参数返回一个接受可变参数的闭包函数,并交换输入参数的位置代码 constflip=fn=>(first,...rest)=>fn(...rest,first); 示例对象合并:leta={name:'JohnSmith'};letb={};constmergeFrom=flip(Obj

Adapter - over

2019-03-27 描述创建一个函数,该函数可以使用传入的每一个方法来接收的给定的可扩展参数作为参数执行后并返回结果。提示使用 Array.prototype.map() 和 Function.prototype.apply() 将传入的函数进行迭代并应使用给定的参数。代码 constover=(...fns)=>(...args)=>fns.map(fn=>fn.apply(null,args)); 示例获取

Adapter - overArgs

2019-03-28 描述创建一个函数,使其可以调用提供的函数和参数进行转换。提示使用 Array.prototype.map() 让传入的转换函数能够一一对应接受传入的参数。通过扩展运算符将组装好的转换函数传给 fn。代码 constoverArgs=(fn,transforms)=>(...args)=>fn(...args.map((val,i)=>transforms[i](val))); 示例依次计算

Adapter - pipeAsyncFunctions

2019-03-29 描述为输入的异步函数进行从左到右的依次执行。提示对接受的函数参数使用扩展运算符后便可用 Array.prototype.reduce() 来执行从左到右的函数组合。为接受的异步函数使用 Promise.then()。接受的函数参数可以返回以下组合:简单值,Promise,或者定义为 async 函数且通过 await 返回的异步值。所有函数必须是一元的。代码 constpipeAsyncFunc

Adapter - pipeFunctions

2019-03-30 描述从左到右依次执行传入的函数组合。提示对接受的函数参数使用扩展运算符后便可用 Array.prototype.reduce() 来执行从左到右的函数组合。第一个(最左边)函数可以接受一个或多个参数,剩下的函数只能为一元函数。代码 constpipeFunctions=(...fns)=>fns.reduce((f,g)=>(...args)=>g(f(...args))); 示例对参数