【发布时间】:2020-04-18 21:41:09
【问题描述】:
我不熟悉将 API 与 React Native 一起使用,我已经弄清楚了一些事情,但我现在要做的是创建一个搜索功能。到目前为止,我已经尝试了一些事情,但要么没有调用该函数,要么我收到关于该函数作为对象调用的错误。另外,我正在使用 axios 进行此 API 调用
这是我到目前为止所得到的。
export default class CategoryScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
data: [],
isVisible: true,
city: '280',
isLoading: true,
search: ''
}
}
async componentDidMount() {
try {
const id = this.props.navigation.state.params.category;
const city = this.state.city;
const result = await axios.request({
method: 'get',
url: `https://developers.zomato.com/api/v2.1/search?city_id=${city}&category=${id}`,
headers: {
'Content-Type': 'application/json',
'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
}
});
this.setState({ data: result.data.restaurants });
} catch (err) {
console.log(err);
} finally {
this.setState({ isLoading: false });
}
}
updateSearch = search => {
this.setState({ search });
};
searchReq = () => {
axios.request({
method: 'get',
url: `https://developers.zomato.com/api/v2.1/search?city_id=${city}&q${search}&category=${id}`,
header: {
'Content-Type': 'application/json',
'user-key': 'a31bd76da32396a27b6906bf0ca707a2'
}
});
this.setState({ data: result.data.restaurants });
}
render() {
const { search } = this.state;
return (
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
onSubmitEditing={this.searchReq}
value={search}
/>
)
}
}
如果有更高级的方法,我愿意学习新事物,我只想完成我想做的事情。另外,我知道如果我当前的方法有效,如果用户在两者之间添加一个空格,它仍然会导致问题,所以我非常愿意学习新的和更高级的方法
【问题讨论】:
-
你能分享一下世博小吃中的代码吗?生病检查那里
-
@CoolMAn 我无法运行您的博览会小吃,有很多错误。在修复它们并将您的 LOGO 指向我能够运行的唯一图像资产之后。第 ~27 行:
this.props.navigation未定义,因此在尝试访问navigate时失败。不过你不要打电话给this.navigate。 snack.expo.io/ryiOgvuJI -
@DrewReese 对此我深表歉意。我使用导航转到另一个屏幕,但是我一定已经删除了有关它的其余代码并忘记了这个。
-
@CoolMAn 啊,在那种情况下,这一切似乎都与注释掉的一样。 (修复其他错误后)
-
@DrewReese 搜索功能有效并显示与搜索相关的结果?它仍然不适合我:\
标签: reactjs react-native axios zomato-api