美文网首页
react 面试问题

react 面试问题

作者: skoll | 来源:发表于2021-01-20 11:28 被阅读0次

如果在初始状态中使用 props 属性会发生什么?

如果在不刷新组件的情况下更改组件上的属性,则不会显示新的属性值,因为构造函数函数永远不会更新组件的当前状态。只有在首次创建组件时才会用 props 属性初始化状态

//这里是不会显示更新的输入值的
class MyComponent extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      records: [],
      inputValue: this.props.inputValue
    };
  }

  render() {
    return <div>{this.state.inputValue}</div>
  }
}

//这里会显示
class MyComponent extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      record: []
    }
  }

  render() {
    return <div>{this.props.inputValue}</div>
  }
}

createElement() 和 cloneElement() 方法有什么区别?

JSX 元素将被转换为 React.createElement() 函数来创建 React 元素,这些对象将用于表示 UI 对象。而 cloneElement 用于克隆元素并传递新的属性

组件的命名方法

export default class TodoApp extends React.Component {
  // ...
}

不用 display 方式

switching组件

//这就是简单版的路由操作吧
import HomePage from './HomePage'
import AboutPage from './AboutPage'
import ServicesPage from './ServicesPage'
import ContactPage from './ContactPage'

const PAGES = {
  home: HomePage,
  about: AboutPage,
  services: ServicesPage,
  contact: ContactPage
}

const Page = (props) => {
  const Handler = PAGES[props.page] || ContactPage

  return <Handler {...props} />
}

// The keys of the PAGES object can be used in the prop types to catch dev-time errors.
Page.propTypes = {
  page: PropTypes.oneOf(Object.keys(PAGES)).isRequired
}

为什么我们需要将函数传递给 setState() 方法?

这背后的原因是 setState() 是一个异步操作。出于性能原因,React 会对状态更改进行批处理,因此在调用 setState() 方法之后,状态可能不会立即更改。这意味着当你调用 setState() 方法时,你不应该依赖当前状态,因为你不能确定当前状态应该是什么。这个问题的解决方案是将一个函数传递给 setState(),该函数会以上一个状态作为参数。通过这样做,你可以避免由于 setState() 的异步性质而导致用户在访问时获取旧状态值的问题。

假设初始计数值为零。在连续三次增加操作之后,该值将只增加一个。

this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
// this.state.count === 1, not 3


this.setState((prevState, props) => ({
  count: prevState.count + props.increment
}))
// this.state.count === 3 as expected

在 React v16 中是否支持自定义 DOM 属性

1 .支持所有自定义的DOM属性
2 .建议避免使用 forceUpdate(),强制更新组件刷新,并且只在 render() 方法中读取 this.props 和 this.state。

super(props)做了什么?

1 .传统的组件样式

class Checkbox extends React.Component {
  constructor(props) {
    super(props);
    this.state = { isOn: true };
  }
  // ...
}

2 .super指的是父类的构造函数,在上面的例子中,指的是react.component的实现
3 .在调用父类构造函数之前,是不能在constructor中使用this关键字
4 .让 React.Component 构造函数能够初始化 this.props,将 props 传入 super 是必须的
5 .React 在调用构造函数后也立即将 props 赋值到了实例上,即使你不传props,也是可以访问的。但是这样不是很明确,最好还是加上为好
6 .React 会在构造函数执行完毕之后给 this.props 赋值。但如此为之会使得 this.props 在 super 调用一直到构造函数结束期间值为 undefined。
7 .如果super传入了props,那么会在构造函数执行完毕之前被赋值

class Button extends React.Component {
  constructor(props) {
    super(props); // ✅ 传入 props
    console.log(props);      // ✅ {}
    console.log(this.props); // ✅ {}
  }
  // ...
}

8 .super(props, context) 这里是两个参数,但是后面的一般都不会用到
9 .有了hook之后,就不用再搞这些有的没的了
10 .

相关文章

  • React相关面试经典问题

    React相关面试经典问题 A.react中setState以后发生了什么 在调用setState以后, 1、re...

  • React面试题

    下面是一个常用的关于 React 的面试问题列表: React 的工作原理 React 会创建一个虚拟 DOM(v...

  • react 面试问题

    如果在初始状态中使用 props 属性会发生什么? createElement() 和 cloneElement(...

  • 面试官:说说react的渲染过程

    面试官:说说react的渲染过程 hello,这里是潇晨,大家在面试的过程中有没有遇到过一些和react相关的问题...

  • react 面试常见问题

    1.react的生命周期 2.调用 setState 之后发生了什么? 在代码中调用setState函数之后,Re...

  • 【react面试题】不可错过的react 面试题 「务必收藏」

    下面是一个常用的关于 React 的面试问题列表: 无论作为一个面试者,或者招聘官,下面这些问题都可以去参考 Re...

  • React面试题总结

    React面试题总结内容主要包括基础知识,React 组件,React Redux,React 路由。 基本知识 ...

  • .

    进击的react - https://zhuanlan.zhihu.com/advancing-react 面试中...

  • 理解JSX 和虚拟 DOM

    前言 jsx和虚拟dom一直都是react面试中老生常谈的问题,但面试题背归背,只有把问题弄懂了才能转换成自己的真...

  • 前端面试题

    本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React htm...

网友评论

      本文标题:react 面试问题

      本文链接:https://www.haomeiwen.com/subject/tyjqzktx.html