Может кто-то, пожалуйста, помогите мне в этом. Я вижу ответ от api, но когда страница отображается, ответ слишком поздний для рендеринга. Я не мог найти, что я делаю неправильно. Я был бы очень признателен, если бы кто-нибудь мог объяснить. БлагодаряReact Redux - данные ответа на загрузку перед визуализацией
Ниже мой редуктор
export default function reducer(state = {
responseCode : {
},
fetching: false,
fetched: false,
error: null
}, action){
switch(action.type){
case 'FETCH_RESPONSECODE_PENDING' : {
return { ...state, fetching: false}
break;
}
case 'FETCH_RESPONSECODE_ERROR' : {
return { ...state, fetching: false, error: action.payload }
}
case 'FETCH_RESPONSECODE_FULFILLED' : {
return{
...state,
fetching: false,
fetched: true,
responseCode: action.payload
}
break;
}
}
return state;
}
// SearchResponseCode Компонент
handleSearch(event){
event.preventDefault();
}
render(){
return (
<form>
<div className="col-xs-8">
<input type="number" className="form-control" placeholder="e.g. main mailing response code or recruitment campaign code" ref="responseCode" />
</div>
<div className="col-xs-4">
<button className="btn btn-default" onClick={this.handleSearch.bind(this)}>Search</button>
</div>
</form>
)
}
// Главный компонент
import SearchResponseCode from './search-response-code'
import { connect } from 'react-redux'
import { fetchResponseCode } from '../../actions/responseCodeActions'
@connect((store)=>{
return{
responseCode: store.responseCode.responseCode
};
})
fetchResponseCode(){
this.props.dispatch(fetchResponseCode(brandUrl, 2570010))
}
render(){
const { responseCode } = this.props
console.log(this.responseCode)
return(
<Tabs selectedIndex={0}>
<TabList>
<Tab>Search By Responce Code</Tab>
<Tab>Search By Item Code</Tab>
<Tab>Searh All</Tab>
</TabList>
<TabPanel>
<SearchResponseCode fetchResponseCode={this.fetchResponseCode.bind(this)} />
</TabPanel>
<TabPanel>
<SearchItemCode />
</TabPanel>
<TabPanel>
</TabPanel>
</Tabs>
)
}
}
// Действие
import axios from 'axios'
export function fetchResponseCode(brandUrl, responseCode){
let url = brandUrl + '/api/offer/' + responseCode;
return function(dispatch){
axios.get(url)
.then((response) => {
dispatch({
type : 'FETCH_RESPONSECODE_FULFILLED',
payload : response.data
})
})
.catch((err) => {
dispatch({
type : 'FETCH_RESPONSECODE_ERROR',
payload : err
})
})
}
}
Ваш компонент SearchResponseCode не все, что может быть важно для вас. Axios использует обещания отправить в магазин, что должно вызвать рендер, когда ответ вернется. Другими словами, ответ не слишком поздно для рендера, вы, вероятно, не используете правильную часть состояния. –
Привет @JoPeyper Спасибо за ответ. Можете ли вы узнать, что я делаю неправильно? – Mesmerize86
@ Mesmerize86 Что именно происходит при нажатии кнопки поиска btn в компоненте SearchResponseCode? Страница немного ждет, пока она не будет повторно отображена? – semuzaboi