window.enableMouseFlow在componentDidMount()中未定义,但在render()中可用

时间:2018-09-07 14:44:27

标签: arrays reactjs ecmascript-6 react-redux

嗨,我有这段代码

if (condition1 & condition2) {
   something = this.props.something.filter(1)).then(this.props.something.filter(2)
} else if (condition1) {
   something = this.props.something.filter(1)
} else if (condition2) {
   something = this.props.something.filter(2)
}

页面初始加载时,我得到的结果为

    export class CompanyAccountsList extends Component {
        constructor(props) {
            super(props);
        }

        getChildContext() {
            return { prefix: 'company_accounting' };
        }

        componentDidMount() {
            //getting window.enableMouseFlow in this console
            console.log(window);

            //can't get window.enableMouseFlow in this console
            console.log(window.enableMouseFlow);

            if (window.enableMouseFlow) {
                //This codes are never executing as the condition is undefined
                enableMouseFlow();
                setMouseFlowTag('new_company_accounting');
            }
        }

        render() {
    //Rendering codes are here
    }

在控制台的“窗口对象”中,“ enableMouseFlow”可用,但是当我尝试将其作为console.log(window.enableMouseFlow)时;令人安慰的是'undefined'

如果我在render()方法中对其进行控制台,则得到的结果为:

Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …} CompanyAccountsList.jsx?a48a:36
undefined

总而言之,我在componentDidMount()中找不到'window.enableMouseFlow'

2 个答案:

答案 0 :(得分:1)

我认为console.log正在传递对窗口的引用,因此可以在将其实际记录到控制台时解决。 你可以尝试

const x = JSON.stringify(window); console.log(x); (我认为这会在componentDidMount时为您提供窗口)

但是我猜想enablemouseflow是在其他脚本中创建页面后添加到window的东西,因此该组件实际上不可用。 (但将在渲染时可用)。

答案 1 :(得分:0)

@Alan是的,实际上我正在componentDidMount中获得窗口,即使我在控制台窗口中也可以在控制台中获得enableMouseFlow。

console.log(window);

Output: 
//window.enableMouseFlow is available

但是,如果我仅控制台window.enableMouseFlow,则会得到未定义的信息

console.log(window.enableMouseFlow);

Output:
//Undefined
////window.enableMouseFlow is not available

第二,是的,我在想,与您在其他脚本中创建页面后将enablemouseflow添加到窗口相同,但是我还有其他一些类似的reactJs页面,可以在其中获取console.log(window.enableMouseFlow) componentDidMount

仅供参考,在浏览器控制台中填充页面后,我可以获取console.log(window.enableMouseFlow);

实际上window.enablemouseflow实际上稍后会加载,请参见屏幕截图: console screenshot