专业编程基础技术教程

网站首页 > 基础教程 正文

React Native实现搜索框功能

ccvgpt 2024-08-09 11:53:54 基础教程 11 ℃

手把手教你如何在React Native中实现搜索功能,搜索图标使用的是react-native-vector-icons中的MaterialIcons,前提是已经安装了react-native-vector-icons,安装react-native-vector-icons参见:在React Native项目中使用react-native-vector-icons图标

代码:

React Native实现搜索框功能

import React, {useState} from 'react';
import {
  View,
  Text,
  ScrollView,
  TextInput,
  ActivityIndicator,
} from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
import {DrawerParamList, TabParamList} from '../../../types/types';
import {CompositeNavigationProp} from '@react-navigation/native';
import {BottomTabNavigationProp} from '@react-navigation/bottom-tabs';
import {DrawerNavigationProp} from '@react-navigation/drawer';
import MaterialIcons from 'react-native-vector-icons/MaterialIcons';

// export type HomeScreenProps = RouterStackScreenProps<'HomeScreen'>;
export type HomeScreenProps = CompositeNavigationProp<
  BottomTabNavigationProp<TabParamList, 'HomeScreen'>,
  DrawerNavigationProp<DrawerParamList>
>;
const HomeScreen = ({route, navigation}: HomeScreenProps) => {
  const [query, setQuery] = useState<string>(''); // 搜索内容
  const [loading, setLoading] = useState<boolean>(true); // 是否在搜索中
  const [opacity, setOpacity] = useState<number>(0); // 清空搜索内容时清空图标的透明度

  const fetchData = () => {
    setLoading(false);
    setOpacity(1);
    // TODO
    //  调用后端搜索接口,
    //  搜索结束要将state恢复初始状态
    // setLoading(true);
    // setOpacity(0);
  };

  return (
    <View style={{flex: 1}}>
      {/*TODO*/}
      <ScrollView>
        <View
          style={{
            flexDirection: 'row',
            borderColor: '#c6c6c6',
            borderRadius: 8,
            borderWidth: 1,
            paddingVertical: 10,
            paddingHorizontal: 8,
          }}>
          <MaterialIcons
            name="search"
            size={20}
            color="#c6c6c6"
            style={{marginRight: 5}}
          />
          <TextInput
            placeholder="搜索"
            autoFocus={true}
            clearButtonMode="while-editing"
            returnKeyType="search"
            onChangeText={query => {
              setQuery(query);
            }}
            onSubmitEditing={() => {
              fetchData();
            }}
          />
          {/*  搜索时显示加载指示器*/}
          <ActivityIndicator
            size="small"
            color="#6435c9"
            animating={!loading}
            style={{position: 'absolute', right: 10, top: 20, opacity: opacity}}
          />
        </View>
      </ScrollView>
    </View>
  );
};

export default HomeScreen;

使用React Native提供的TextInput组件来实现搜索输入框功能,该组件的属性说明:

  • autoFocus:自动选中输入内容
  • clearButtonMode:显示清除输入内容图标,只有在iOS显示这个属性
  • returnKeyType:回车键输入时键盘最后一个键显示的文本内容,这里设置文本为”search“,只有在iOS显示这个属性
  • onSubmitEditing:搜索触发的回调函数,这里绑定fetchData方法,需要在这里个方法调用后端搜索接口获取搜索结果

最近发表
标签列表