最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React 面试题精选 Day3

    正文概述 掘金(洛竹)   2021-03-24   604
    • React 面试题精选 Day1
    • React 面试题精选 Day2

    1. refs 转发是什么?

    Ref 转发 是让某些组件可以使用它们接收的 ref 的特性,这些组件还可以进一步将其传递给子组件。

    const ButtonElement = React.forwardRef((props, ref) => (
      <button ref={ref} className="CustomButton">
        {props.children}
      </button>
    ));
    
    // Create ref to the DOM button:
    const ref = React.createRef();
    <ButtonElement ref={ref}>{'Forward Ref'}</ButtonElement>;
    

    2. refs 回调和 findDOMNode() 哪个是首选项?

    最好使用 refs 回调 而不是 findDOMNode() API。因为 findDOMNode() 将来会阻止对 React 的某些改进。

    使用 findDOMNode 的“传统”方法:

    class MyComponent extends Component {
      componentDidMount() {
        findDOMNode(this).scrollIntoView();
      }
    
      render() {
        return <div />;
      }
    }
    

    推荐的方式是:

    class MyComponent extends Component {
      constructor(props) {
        super(props);
        this.node = createRef();
      }
      componentDidMount() {
        this.node.current.scrollIntoView();
      }
    
      render() {
        return <div ref={this.node} />;
      }
    }
    

    3. 为什么 Strings Refs 被遗弃了?

    如果你以前使用过 React,那么你可能会熟悉一个较旧的 API,其中的ref 属性是一个字符串,例如 ref = {textInput'},并且 DOM 节点作为this.refs.textInput 访问。我们建议你不要这样做,因为 String 引用有以下问题,并且被认为是旧版的。字符串引用已经在 React v16中被删除

    1. 他们迫使 React 跟踪当前正在执行的组件。这是有问题的,因为它使 React 模块成为有状态的,并因此在打包 React 模块时冲突而引起奇怪的错误。
    2. 它们是“不可组合的” — 如果库在传递的子项上放置了引用,则用户不能在其上放置其他引用。回调引用完全可以组合。
    3. 他们不能和静态分析工具配合(比如 Flow)。Flow 无法猜测出框架 this.refs 上出现的字符串引用及其类型(可能不同)。 回调引用对静态分析更友好。
    4. 它无法像大多数人期望的那样使用“渲染回调”模式(例如)
      class MyComponent extends Component {
        renderRow = index => {
          // This won't work. Ref will get attached to DataTable rather than MyComponent:
          return <input ref={'input-' + index} />;
      
          // This would work though! Callback refs are awesome.
          return <input ref={input => (this['input-' + index] = input)} />;
        };
      
        render() {
          return <DataTable data={this.props.data} renderRow={this.renderRow} />;
        }
      }
      

    4. 虚拟 DOM 是什么?

    Virtual DOM(VDOM)是_Real DOM_的内存表示形式。 UI的表示形式保留在内存中,并与“真实” DOM同步。 这是在调用渲染函数和在屏幕上显示元素之间发生的一步。 这整个过程称为 协调。

    5. 虚拟 DOM 原理

    虚拟 DOM 工作原理只有三个简单的步骤。

    1. 无论何时任何基础数据发生更改,整个 UI 都将以虚拟 DOM 表现形式重新呈现。

    React 面试题精选 Day3

    1. 然后,计算先前的 DOM 表现形式与新的 DOM 表现形式之间的差异。

    React 面试题精选 Day3

    1. 一旦完成计算,将只会更新内容真正改变的那部分真是 DOM。

    React 面试题精选 Day3

    6. Shadow DOM 和 Virtual DOM 有什么区别?

    Shadow DOM 是一种浏览器技术,主要用于确定 web components 中的变量和 CSS。Virtual DOM 是由浏览器 API 之上的 JavaScript 库实现的概念。

    7. React Fiber 是什么?

    Fiber 是React v16 中新的 协调 引擎或核心算法的重新实现。React Fiber 的目标是提高其在动画、布局、手势、暂停、中止或重用工作的能力,以及为不同类型的更新分配优先级等方面的适用性和新的并发原语。

    8. React Fiber 的主要设计目的是什么?

    React Fiber 的目标是提高其对动画、布局和手势等领域的适用性。它的 headline 功能是增量渲染:能够将渲染工作拆分为多个块并将其分布到多个帧中。

    9. 受控组件是什么?

    在用户输入后能够控制表单中输入元素的组件被称为“受控组件”,比如每一个状态概念都将有一个相关的处理函数

    例如下面的例子中,为了将名字转换为全大写,我们使用 handleChange

    handleChange(event) {
       this.setState({value: event.target.value.toUpperCase()})
    }
    

    10. 非受控组件是什么?

    受控组件是那些把状态维护在其内部的组件,当你想要获得当前值时需要使用 ref 查询 DOM。这有一点像传统的 HTML。

    在下面的 UserProfile 组件中,name 输入被使用 ref 获取:

    class UserProfile extends React.Component {
      constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this);
        this.input = React.createRef();
      }
    
      handleSubmit(event) {
        alert('A name was submitted: ' + this.input.current.value);
        event.preventDefault();
      }
    
      render() {
        return (
          <form onSubmit={this.handleSubmit}>
            <label>
              {'Name:'}
              <input type="text" ref={this.input} />
            </label>
            <input type="submit" value="Submit" />
          </form>
        );
      }
    }
    

    大多数场景中,我们建议使用受控组件来代替表单组件。


    起源地下载网 » React 面试题精选 Day3

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元