开发者社区> 问答> 正文

#React 为什么字符串引用是旧式的?

#React 为什么字符串引用是旧式的?

展开
收起
因为相信,所以看见。 2020-05-07 16:38:39 790 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

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

    它们迫使React跟踪当前正在执行的组件。这是有问题的,因为它使React模块成为有状态的,并因此在捆绑中复制React模块时引起奇怪的错误。 它们是不可组合的 -如果库在传递的子项上添加了引用,则用户无法在其上添加引用。回调引用完全可以组合。 它们不适用于 Flow等静态分析。Flow无法猜测框架使字符串ref出现在this.refs其上的魔力及其类型(可能有所不同)。回调引用比静态分析更友好。 不能像大多数人期望的那样使用“渲染回调”模式(例如

    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} />
      }
    }
    
    
    2020-05-07 16:39:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
利用编译将 Vue 组件转成 React 组件 立即下载
React Native 全量化实践 立即下载
React在大型后台管理项目中的工程实践 立即下载