【问题标题】:Unexpected namespace import import/no-namespace意外的命名空间导入导入/无命名空间
【发布时间】:2017-11-24 19:17:57
【问题描述】:

我正在尝试在 React 中导入 D3v4 以生成 Dash 组件。到目前为止,这是我的代码:

import React, {Component} from 'react';
import PropTypes from 'prop-types';
import * as d3 from 'd3';

function createBox(divId) {
    var svgContainer = d3.select(divId).append('svg')
                                     .attr('width', 200)
                                     .attr('height', 200);

 //Draw the Circle
   svgContainer.append('circle')
                        .attr('cx', 30)
                        .attr('cy', 30)
                        .attr('r', 20);
}

/**
 * ExampleComponent is an example component.
 * It takes a property, `label`, and
 * displays it.
 * It renders an input with the property `value`
 * which is editable by the user.
 */
export default class ExampleComponent extends Component {
    constructor() {
        super();
        this.plot = this.plot.bind(this);
    }
    plot(props) {
       createBox(props.id);
    }

    componentDidMount() {
        this.plot(this.props);
    }

    componentWillReceiveProps(newProps) {
        this.plot(newProps);
    }

    render() {
        const {id} = this.props;
        return (
            <div id={id}/>
        );
    }
}

ExampleComponent.propTypes = {
    /**
     * The ID used to identify this compnent in Dash callbacks
     */
    id: PropTypes.string

};

但是当我尝试使用 $ npm run prepublish 预发布 Dash 时,它会引发错误:

error Unexpected namespace import  import/no-namespace

它又指向import * as d3 from 'd3';

我正在构建由Plotly 提供的关于编写您自己的组件的示例。

【问题讨论】:

    标签: reactjs d3.js plotly plotly-dash


    【解决方案1】:

    esling Docs中提到的:

    报告是否使用命名空间导入。

    所以你应该把它改成这样:

    import d3 from 'd3';
    

    如果您必须使用命名空间,则禁用该规则(如 eslint 文档中所述)

    更新
    阅读docs of d3 后,他们使用相同的模式,所以我假设d3 没有default 导出,因此:

    import d3 from 'd3';
    

    可能不行。
    然后或者对这样的个人部分使用命名导入:

    import {scaleLinear} from "d3-scale";  
    

    或者像我上面提到的那样禁用规则。

    【讨论】:

    • 我试过这个解决方案,它奏效了!我只需要将d3-selection(我正在使用的库)添加到我的依赖项中。谢谢!
    • 只是补充一点,一个非常简单的禁用规则的解决方案就是使用// eslint-disable-next-line import/no-namespace,然后在下一行输入import * as d3 from 'd3';
    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 2017-01-25
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多