React-Redux - возвращение действия не определено - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь выполнить вызов API через действие. Я использую событие onchange, чтобы позвонить и добавить идентификатор.

Я создал MapDispatchToProps, где связывал свои действия с помощью bindActionCreators. Когда я вызываю действие, я вижу, что он выполняет вызов API и получает правильное значение. Только когда он возвращается к событию onchange, он не определен.

Я пробовал следовать нескольким примерам и учебникам по множеству примеров, но ни один из них не работал.

ДЕЙСТВИЯ:

export function loadStanding(id) {
var url = "http://api.football-data.org/v2/competitions/" + id + "/standings";
return function (dispatch) {
    return fetch(url, 
        { 
            mode: "cors"
        })
        .then(
            response => response.json(),
            error => console.log('An error occurred.', error)
        )
        .then((json) => {
            console.log("=== LOADSTANDING ACTION ===");
            console.log(json);
            dispatch(loadStandingsSucces(json));
        });
};

}

PAGE:

class HomePage extends React.Component {
constructor(props, context) {
    super(props, context);

    this.state = { standings: [], selectedId: 0 };
    this.handleChange = this.handleChange.bind(this);
}

handleChange(event) {
    event.preventDefault();
    this.props.actions.loadStanding(event.target.value).then(function(output) {
        console.log("=== HANDLECHANGE ===");
        console.log(output);
    });
}

render() {
    const { competitions = [] } = this.props.competitions;
    const compIds = [2000,2001,2002,2003,2013,2014,2015,2016,2017,2018,2019,2021];
    return (
        <div className="flex-container">
            <div className="row">
                <div className="flex-item">
                    <h2>Kies een competitie:</h2>
                </div>
                <div className="flex-item">
                    <DropdownComponent onChange={this.handleChange} value="id" itemKey="id" text="name" competitions={competitions.filter(function(comp) { return compIds.includes(comp.id); })} />
                </div>
                <div className="flex-item">
                    {/* <TableComponent /> */}
                </div>
            </div>
        </div>
    );
    }
}
HomePage.propTypes = {
competitions: PropTypes.any.isRequired,
actions: PropTypes.object.isRequired
};

function mapStateToProps(state) {
return {
    competitions: state.competitions,
    standings: state.standings
};
}

const mapDispatchToProps = (dispatch) => {
return {
  actions: bindActionCreators(standingActions, dispatch)
};
};

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

1 Ответ

0 голосов
/ 02 апреля 2019

Во-первых, я рекомендую вам проверить, что вызов работает должным образом с почтальоном или подобным инструментом.

Во-вторых, я думаю, что у вас есть небольшое представление о том, как управлять данными с помощью React и Redux.

Данные, которые вы выбираете, должны храниться в хранилище избыточных данных. Когда вы вызываете этого создателя действия, данные, полученные в ответе, должны отправляться в редуктор. Этот редуктор будет хранить эту информацию, а затем будет вызывать повторную визуализацию вашего компонента, и извлеченные данные будут доступны на подпорках компонента.

Больше информации здесь: Redux поток данных

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