Skip to content

Rule Proposal: Check for global references inside render #246

Open
@mridgway

Description

@mridgway

When using React for server rendering, it can be problematic when a component relies on window or document or other globals inside of render. It will cause checksum issues when you get to the client. Instead of checking whether you are on the client within render, it's better to use the componentDidMount lifecycle event to set a state which is used in render instead.

Problematic:

class Foo extends React.Component {
    render() {
        if (typeof window === 'undefined') {
            return null;
        }
        return <Bar />;
    }
}

Better:

class Foo extends React.Component {
    constructor() {
        this.state = {showBar: false};
    }
    componentDidMount() {
        this.setState({showBar: true});
    }
    render() {
        if (!this.state.showBar) {
            return null;
        }
        return <Bar />;
    }
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions