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

    正文概述 掘金(洛竹)   2021-06-17   365

    1. 在 React 中使用 ES6 类的,super()super(props) 之间有什么区别?

    当你想在 constructor() 中访问 this.props 时,你应该把 props 传给 super() 方法。

    使用 super(props)

    class MyComponent extends React.Component {
      constructor(props) {
        super(props);
        console.log(this.props); // { name: 'John', ... }
      }
    }
    

    使用 super()

    class MyComponent extends React.Component {
      constructor(props) {
        super();
        console.log(this.props); // undefined
      }
    }
    

    constructor() 之外,两者都会显示相同的 this.props 的值。

    2. 如何在 JSX 内循环?

    你可以简单地使用 Array.prototype.map 与 ES6 箭头函数语法。

    例如,对象的 items 数组被映射成组件的数组。

    <tbody>
      {items.map(item => (
        <SomeComponent key={item.id} name={item.name} />
      ))}
    </tbody>
    

    但你不能用 for 循环来迭代。

    <tbody>
    for (let i = 0; i < items.length; i++) {
      <SomeComponent key={items[i].id} name={items[i].name} />
    }
    </tbody>
    

    这是因为 JSX 标签被转换为函数调用,而且你不能在表达式中使用语句。这可能会改变,因为 do 表达式是第一阶段的建议。

    3. 你如何在属性引号中访问 props?

    React(或 JSX)不支持属性值内的变量插值。下面的表示方法就不能用了。

    <img className="image" src="images/{this.props.image}" />
    

    但你可以把任何 JS 表达式放在大括号内作为整个属性值。所以下面的表达式是有效的。

    <img className="image" src={'images/' + this.props.image} />
    

    使用模板字符串也可以。

    <img className="image" src={`images/${this.props.image}`} />
    

    4. 什么是带 shape 的 React 原型数组?

    如果你想把一个对象数组传递给一个具有特定 shape 的组件,那么使用 React.PropTypes.shape() 作为 React.PropTypes.arrayOf() 的一个参数。

    ReactComponent.propTypes = {
      arrayWithShape: React.PropTypes.arrayOf(
        React.PropTypes.shape({
          color: React.PropTypes.string.isRequired,
          fontSize: React.PropTypes.number.isRequired,
        }),
      ).isRequired,
    };
    

    5. 如何有条件地应用类属性?

    你不应该在引号内使用大括号,因为它将被计算为一个字符串。

    <div className="btn-panel {this.props.visible ? 'show' : 'hidden'}">
    

    相反,你需要把大括号移到外面(别忘了在类名之间包括空格)。

    <div className={'btn-panel ' + (this.props.visible ? 'show' : 'hidden')}>
    

    模板字符串也可以使用。

    <div className={`btn-panel ${this.props.visible ? 'show' : 'hidden'}`}>
    

    6. React 和 ReactDOM 之间有什么区别?

    react 包包含 React.createElement()React.ComponentReact.Children, 以及其他与元素和组件类相关的帮助函数。你可以把这些看作是你构建组件所需要的同构或通用助手。react-dom 包包含 ReactDOM.render(),在 react-dom/server 中,我们有 ReactDOMServer.renderToString()ReactDOMServer.renderToStaticMarkup() 的服务器端渲染支持。

    7. 为什么 ReactDOM 要从 React 中分离出来?

    React 团队致力于将所有与 DOM 相关的功能提取到一个单独的库中,称为 ReactDOM。React v0.14 是第一个分割库的版本。通过查看一些包,react-nativereact-artreact-canvasreact-three,已经很清楚,React 的优秀和本质与浏览器或 DOM 无关。

    为了建立更多 React 可以渲染的环境,React 团队计划将主 React 包分成两个:reactreact-dom。这就为编写可以在网络版 React 和 React Native 之间共享的组件铺平了道路。

    8. 如何使用 React label 元素?

    如果你试图用标准的 for 属性渲染一个绑定在文本输入上的 <label> 元素,那么它产生的 HTML 会缺少该属性,并在控制台打印出警告。

    <label for={'user'}>{'User'}</label>
    <input type={'text'} id={'user'} />
    

    由于 for 在 JavaScript 中是一个保留关键字,我们可以使用 htmlFor 代替。

    <label htmlFor={'user'}>{'User'}</label>
    <input type={'text'} id={'user'} />
    

    9. 如何组合多个内联样式对象?

    你可以在常规 React 中使用展开语法。

    <button style={{ ...styles.panel.button, ...styles.panel.submitButton }}>
      {'Submit'}
    </button>
    

    如果你使用的是 React Native,那么你可以使用数组符号。

    <button style={[styles.panel.button, styles.panel.submitButton]}>
      {'Submit'}
    </button>
    

    10. 如何在浏览器调整大小时重新渲染视图?

    你可以在 componentDidMount() 中监听 resize 事件,然后更新尺寸(widthheight)。你应该在 componentWillUnmount() 方法中移除监听器。

    class WindowDimensions extends React.Component {
    
      componentWillMount() {
        this.updateDimensions();
      }
    
      componentDidMount() {
        window.addEventListener('resize', this.updateDimensions);
      }
    
      componentWillUnmount() {
        window.removeEventListener('resize', this.updateDimensions);
      }
    
      updateDimensions = () => {
        this.setState({ width: window.innerWidth, height: window.innerHeight });
      }
    
      render() {
        return (
          <span>
            {this.state.width} x {this.state.height}
          </span>
        );
      }
    }
    

    起源地下载网 » React 面试必知必会 Day10

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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