Клонируется ли "this" при ссылке на объект экспорта в том же модуле? - PullRequest
0 голосов
/ 19 июня 2020

Кто-нибудь может объяснить, что происходит в этом коде, пожалуйста?

У меня есть модуль Reactjs, в котором я использовал компонент ReactDataGrid. Важная часть кода выглядит следующим образом:

export default class IssueTable extends Component {
    state = {
        issues: [],
        postHtml: {},
        isFullScreenMode: false,
        loading: true,
        columns: []
    }
    componentDidMount = () => {
        this.props.getIssues(filter).then(response => {
          ...
            //******** PLACE 1 THAT I THINK IT SHOULD WORK, BUT NOT!  **********
            //this.createIssueTableServiceObject() 
          ...          
            this.refreshTable()
        })
    }

    createIssueTableServiceObject() {
        issuleTableService = {
            getColumns: () => this.columns,
            updateTableRow: this.handleRowsUpdated,
            getPostHtml: issueId => this.state.postHtml[issueId],
            getOriginalRow: rowIndex => this.originalIssues[rowIndex],
            getRenderedRow: rowIndex => this.state.issues[rowIndex]
        };
    }

    refreshTable = () => {
        //******** PLACE 2 THAT IT WORKS  **********
        this.createIssueTableServiceObject()
        this.setState({
            ...
        })
    }

    columns = [{
        ....
        formatter: (props) => {
            return (<IssueCell
                {...props}
                issuleTableService= {issuleTableService}
                 />)
        }
    }]
}

export let issuleTableService 

Поскольку нет конфигурации для отправки данных в подкомпонент библиотеки React Data Grid (версия ^ 7.0.0-canary.16), мне нужно чтобы импортировать объект экспорта в модули, мне нужен редактор, который является свойством столбца.

Проблема в том, что для первых строк, которые отрисовываются в таблице, все нормально. Но когда я хочу внести некоторые изменения в строки, состояние компонента в экспортируемом объекте похоже на предыдущее состояние (до редактирования):

getPostHtml: issueId => this.state.postHtml[issueId], //**** this.state has not updated values

Поэтому мне нужно переместить создание объекта экспорта в место 2 в коде для его выполнения и обновления sh его при каждом обновлении таблицы.

Мой вопрос в том, что происходит с «this» в объекте экспорта? Сохраняет ли он копию «этого»?

...