export function fetchData() {
return dispatch => {
fetch(`https://api.exchangeratesapi.io/latest?base=${this.props.base}`)
.then(res => res.json())
.then(data => dispatch(fetchDataSuccess(data)), e => dispatch(fetchDataFail(e)))
}
};
Теперь этот код:
const date = data.date;
const result = (data.rates[this.props.convertTo] * this.props.amount).toFixed(4);
this.setState({
result,
date,
});
переходит в ваш редуктор
if(action.type === FETCH_DATA_SUCCESS) {
const date = action.data.date;
const rates = action.data.rates;
return { ...state, rates, date };
}
Теперь вы можете использовать состояние избыточности в вашем компоненте и выполнять остальные вычисления там (те, которые нуждаются в this.props
).
Чтобы отправить действие fetchData
сейчас, вы выполняете this.props.dispatch(fetchData())
в своем компоненте с реактивным-редуксом.
РЕДАКТИРОВАТЬ
Вот как вы используете состояние в компоненте.
Я предполагаю, что вы создали хранилище избыточностей. что-то вроде:
const store = createStore(rootReducer,applyMiddleware(thunk));
Теперь, вы можете использовать функцию connect
библиотеки react-redux
для подключения состояния редукции к вашему компоненту.
function mapStateToProps(state, ownProps) {
return {
date: state.date,
result: (state.rates[ownProps.convertTo] * ownProps.amount).toFixed(4);
}
}
function mapDispatchToProps(dispatch) {
return {
fetchData: () => dispatch(fetchData())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(YourComponent)
Вы можете использовать этот более высокий порядок Компонент в вашей DOM сейчас и передать ему соответствующие реквизиты:
import ConnectedComponent from "./pathTo/ConnectedComponent";
...
return <View><ConnectedComponent convertTo={...} amount={...} /></View>;
И также внутри YourComponent
теперь вы можете читать this.props.date
и this.props.result
и использовать их везде, где вам нужно.
Возможно, в будущем вы захотите взглянуть на селекторы , чтобы запомнить состояние и снизить затраты производительности на избыточность.