ReactJS问题集结

Issue1:

ajax引入数据,初始化data==null,设置ajax同步async=false可以获取数据,如何在ajax获取结束后render;

Response:

进行条件渲染:根据条件(State)的变化,初始化加载一种情况,数据加载完成后,改变条件(State),渲染另一种情况;

Issue2:

多个同级兄弟组件渲染,如果没有父级标签包裹(ReactJS要求必须有且仅有一个Root节点),如何处理?

Response

不用创建冗余的父级标签,创建一个函数return这些同级组件,在render()函数中返回函数返回值即可;

示例代码:
this.state.data.loading条件判断解决Issue1;
this.renderBody()函数解决Issue2;

constructor() {
    super()

    // data: [1,2,4,5,6,7,9]
    this.state = {
      data: {
        loading: true
      }
    }
  }

  componentDidMount() {
    setTimeout(() => {
      this.setState({
        data: {
          data: [1,9]
        }
      })
    },3000);
  }


  clickHandler() {
    let index = 2,newValue = Date.now() % 9;

    this.setState({
      data: {
        data: [
          ...this.state.data.data.slice(0,index),newValue,...this.state.data.data.slice(index + 1)
        ]
      }
    })

    this.state.data.data[index] = newValue;
    this.forceUpdate()
  }
  
  
  renderBody() {
    return (
      <div>
        {
          _.map(this.state.data.data,(v,i) => <div key={i} style={{ color: v % 2 === 0 ? 'red' : 'green' }}>{v}</div>)
        }
      </div>
    )
  }
  
render() {
    return (
      <div>
        {
          this.state.data.loading
            ? <Loading />
            : this.renderBody()
        }
      </div>
    )
  }

Issue3:

ES6如何实现按需加载?

Response

React不必需要按需加载,封装成组件,在不需要的时候根本就不会下载该组件和该组件的依赖;

Issue4:

React实现服务器端渲染?需要在服务器端(nodejs)运行js,使用renderToStaticMakeup()将组件返回字符串,前端如何获取并转成组件?

Response

React没有需求实现服务器端渲染,如果要求SEO,则可以后台脚本实现静态化,效率等各方面比React好很多;

Issue5:

数据从父组件一层层传下来,如何精准快速的查找到哪个组件定义的state;

Response

Flux或者Redux架构;

Issue6:

生命周期的使用情况;

Response

尽可能的不要使用生命周期,唯一常用的是componentDidMount();

Issue7:

Jest测试有必要么;

Response

实现交互函数的测试即可,页面显示通过看效果即可测试;

Issue8:

this.state.property=val和setState()都可以改变state数据,它们有什么区别?

Response

使用this.state.property=val改变state数据,需要使用forceUpdate()强制渲染,渲染时会销毁原有的State对象并创建新的(复制原对象并更新this.state.property的值),而不是对原有State对象的更改;

Issue9:

React初始化State对象时

this.state = {
  data: {
    data: [1,9],loading:true
  }
}

通过:

this.setState({
  data:{
    loading:false
  }
})

并不会重新渲染,ReactJS检测this.state.data的改变,即State对象顶层属性名的值的改变,这里改变的是this.state.data.loading的结果

Response

this.setState({
  data: {
    data: [
      ...this.state.data.data.slice(0,...this.state.data.data.slice(index + 1)
    ]
  }
})

通过重新组装this.state.property对象并赋值,引发View的重新渲染;

Issue10:

React会把State状态更新操作放在一起,批量执行,是如何执行的?
不同生命周期的State状态更新是在渲染阶段一起,依次执行,还是在该生命周期方法结束后执行,每个生命周期都是独立的;

Response

首先,不推荐频繁的使用生命周期函数;
其次,在生命周期函数中调用this.setState()函数,ReactJS会将this.setState()加入队列中,优先执行完自定义的脚本后,执行State对象的更新;每个生命周期都是独立的;

注意:在componentWillMount()函数中调用this.setState()函数没有意义,这时没有进行渲染,还没有DOM节点,无法进行数据的更新——数据的更新需要在渲染完DOM后进行;

Issue11:

react-router怎么用;

Response

引入依赖:
import { Router,Route,hashHistory } from 'react-router'

Router的使用:

render(
  <Router history={hashHistory}>
    <Route path="/" component={MainView} />
    <Route path="/detail" component={Detail} />
  </Router>,document.getElementById('container')
)

-----------
引入依赖:
import { Link } from 'react-router'

Router的使用:


render() {
    return (
      <div>
        <Link to="/detail">Detail</Link>
        <a href="#/detail">Detail2</a>
      </div>
    )
}

-----------

也可以在函数中使用Location.href.push("/detail")进行跳转;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom