Это легко исправить, но потребуется несколько шагов:
Настройка действия
Настройте редуктор
Извлечение и визуализация данных в компоненте
Создание действия
Прежде всего, вам нужно настроить действие для получения данных на основе VIN
.Похоже, у вас это есть с вашей функцией tagformsubmit
.Я бы сделал несколько корректировок здесь.
Вы должны включить улов, чтобы вы знали, что что-то пошло не так, измените вашу функцию param
, чтобы включить диспетчеризацию, добавить тип и полезную нагрузку в вашу диспетчеризацию и исправить строковый литерал в вашем адресе API.Похоже, много, но это быстрое решение.
Обновите свой текущий код с этого:
export function tagformsubmit(data){
return(dispatch) =>{
axios.get(`http://***`+data)
.then((response) => {
dispatch(taglocationsFetchDataSuccess);
})
};
}
до этого здесь:
//Get Tag Form Submit
export const getTagFormSubmit = vin => dispatch => {
dispatch(loadingFunctionPossibly()); //optional
axios
.get(`/api/path/for/route/${vin}`) //notice the ${} here, that is how you use variable here
.then(res =>
dispatch({
type: GET_TAG_FORM_TYPE,
payload: res.data
})
)
.catch(err =>
dispatch({
type: GET_TAG_FORM_TYPE,
payload: null
})
);
};
Создание редуктора
Не уверен, что вы уже создали редуктор.Если у вас есть, вы можете игнорировать это.Создать свой редуктор тоже довольно просто.Сначала вы хотите определить исходное состояние, а затем экспортировать свою функцию.
Пример
const initialState = {
tags: [],
tag: {},
loading: false
};
export default (state=initialState, action) => {
if(action.type === GET_TAG_FORM_TYPE){
return {
...state,
tags: action.payload,
loading: false //optional
}
}
if(action.type === GET_TAG_TYPE){
return {
...state,
tag: action.payload,
}
}
}
Теперь, когда у вас есть действия и редуктор , давайте настроим ваш компонент.
Компонент
Я предполагаю, что вы знаете весь необходимый импорт.В нижней части вашего компонента вы хотите определить свои типы.
TaglocaByVIN.propTypes = {
getTagFormSubmit: PropTypes.func.isRequired,
tag: PropTypes.object.isRequired
};
mapStateToProps
:
const mapStateToProps = state => ({
tag: state.tag
});
connect
для компонента:
export default connect(mapStateToProps, { getTagFormSubmit })(TaglocaByVIN);
Обновите ваши данные для передачи и передачи в вашу функцию и получитеданные, которые возвращаются.
handleFormSubmit = (e) => {
e.preventDefault();
const { searchvin } = this.state;
this.props.getTagFormSubmit(searchvin);
const { tags } = this.props;
tags.map(tag => {
//do something with that tag
}
Сложив все вместе, ваш компонент должен выглядеть следующим образом (не включая импорт):
class TaglocaByVIN extends Component {
state = {
searchvin: ""
};
handleFormSubmit = e => {
e.preventDefault();
const { searchvin } = this.state;
this.props.getTagFormSubmit(searchvin);
const { tags } = this.props.tag;
if(tags === null){
//do nothing
} else{
tags.map(tag => {
//do something with that tag
});
};
}
changeText = e => {
this.setState({
searchvin: e.target.value
});
};
render() {
return (
<div>
<form onSubmit={this.handleFormSubmit}>
<label>Please provide the last 8 characters of VIN: </label>
<input
type="text"
name="searchvin"
value={this.state.searchvin}
onChange={this.changeText}
/>
<button type="submit">Submit</button>
</form>
</div>
);
}
}
TaglocaByVIN.propTypes = {
getTagFormSubmit: PropTypes.func.isRequired,
tag: PropTypes.object.isRequired
};
const mapStateToProps = state => ({
tag: state.tag
});
export default connect(
mapStateToProps,
{ getTagFormSubmit }
)(TaglocaByVIN);
Так и должно быть.Надеюсь это поможет.