Как вызвать функцию прямо перед выходом из компонента? - PullRequest
0 голосов
/ 09 октября 2018

Я новичок, чтобы реагировать, и я разрабатываю интерфейс для REST-API.

Мой интерфейс для REST-API состоит из 5 сайтов (компонентов), которые маршрутизируются с react-router-dom.

Каждый раз, когда я захожу на сайт, ComponentDidLoad отправляет действие, которое, в свою очередь, вызывает API в моем редукторе.

export function getData(pURL, ...pParams){

    return (dispatch) => {
        axios.get(pURL, {pParams})
        .then(result => {
            dispatch(getDataSuccess(result.data))
        })
        .catch(error => {
            dispatch(getDataFailure(error))
        })
    }
}

Один из моих главных сайтов выглядит следующим образом

class Overview extends Component {

    componentDidMount(){
        this.props.getData(MyURLHere);
    }

    render(){
        return(
            <div>

                {this.props.hasError ? "Error while pulling data from server " : ""}

                {/*  isLoading comes from Store. true = API-Call in Progress  */}
                {this.props.isLoading ? "Loading Data from server" : this.buildTable()}
            </div>
        )
    }
}

let mapStateToProps = state => {
hasError: state.api.hasError,
isLoading: state.api.isLoading,
companies: state.api.fetched 
}

let mapDispatchToProps = {
//getData()
}

export default connect(mapStateToProps, mapDispatchToProps)(Overview); 

state.api.fetched - это моя переменная хранилища, в которой я храню данные из каждого вызова API.

this.buildTable() просто отображает данные и создает простую HTML-таблицу

Моя проблема в том, что я получил переменную состояния магазина isLoading, установленную в true в моем initialState.

Но когда я перехожу на другой сайт, а затем обратно на этот, он автоматическиполучает данные из state.api.fetched и пытается this.buildTable() с ним, потому что isLoading не true.Это заканчивается ошибкой «не является функцией», потому что в ней все еще есть старые, извлеченные данные с другого сайта.

Мое решение состояло бы в том, чтобы всегда вызывать функцию при выходе из компонента (сайта), который сбрасываетсямой магазин на initialState

const initialStateAPI = {
    isLoading: true
}

или прямо на isLoading, чтобы мой сайт не пытался использовать данные из старых выборок.

Есть ли способСделай так?Я надеюсь, что я предоставил достаточно информации, если нет, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 09 октября 2018

Если вы хотите вызвать функцию при выходе из компонента, вы можете использовать функцию componentWillUnmount.Узнайте больше о методах жизненного цикла React.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...