Я использую NavigationEvents для автоматической загрузки моего списка.
Пока он работает и загружает мой обновленный список, но в консоли он продолжает выполнять функцию вызова API на INFINITE L OOP.
Однако, когда я открываю экран списка, я просто хочу загрузить функцию вызова API ОДИН РАЗ.
Так что, если есть какое-либо лучшее решение, пожалуйста, не стесняйтесь помочь.
Фрагмент кода ниже:
import { NavigationEvents } from 'react-navigation';
import NameActionBar from '../components/mNameActionBar';
import FreelancerList from '../components/mFreelancerList';
export default class MasterScreen extends Component {
componentDidMount() {
this.getFreelancerList();
console.log('ComponentDidMount()');
}
getFreelancerList() {
console.log('Freelancer List');
let self = this;
AsyncStorage.getItem('my_token').then((keyValue) => {
console.log('Master Screen (keyValue): ', keyValue); //Display key value
axios({
method: 'get',
url: Constants.API_URL + 'user_m/freelancer_list/',
responseType: 'json',
headers: {
'X-API-KEY': Constants.API_KEY,
'Authorization': keyValue,
},
})
.then(function (response) {
//console.log('Response Data: ', response.data.data);
console.log('Response: ', response);
self.setState({
dataSource: response.data.data,
});
})
.catch(function (error) {
console.log('Error: ', error);
});
}, (error) => {
console.log('error error!', error) //Display error
});
}
viewFreelancerList() {
const { dataSource } = this.state;
return (
<View>
<FlatList
data={dataSource}
keyExtractor={({ id }, index) => index.toString()}
renderItem={({ item }) => <FreelancerList {...item} />}
/>
</View>
);
}
render() {
return (
<>
{<NavigationEvents onDidFocus={this.getFreelancerList()} />}
<NameActionBar />
<ScrollView>
{this.viewFreelancerList()}
</ScrollView>
</>
);
}
}