你如何在 React Native 中将整个选择更改为单个选择?

如何解决你如何在 React Native 中将整个选择更改为单个选择?

我们目前正在基于 React Native 进行开发。 我通过 API 文档通过 GET 请求接收数据, 我通过 MAP 方法创建了滚动视图。 所以现在我试图让选择成为可能, 但如果我选一个,那就全选了。 如果我从我的代码中选择一个,如何让你一个一个地选择?

import React,{ useEffect,useState } from "react";
import { SvgCssUri } from "react-native-svg";
import { deviceeventemitter } from "react-native";
import {
  View,StyleSheet,TouchableHighlight,Text,ScrollView,Image,} from "react-native";
import {
  widthPercentagetoDP as wp,heightPercentagetoDP as hp,} from "react-native-responsive-screen";
import axios from "axios";
import BouncyCheckBox from "react-native-bouncy-checkBox";

const Select = ({ navigation }) => {
  let bouncyCheckBoxRef = null;
  const [bodyType,setBodyType] = useState([]);
  const [standardSelected,setStandardSelected] = useState(false);
  const [isSelected,setSelected] = useState(false);
  const bodyGetData = async () => {
    let body = [];
    try {
      let config = {
        method: "get",url:
          "http://everyweardev-env.eba-azpdvh2m.ap-northeast-2.elasticbeanstalk.com/api/v1/user/bodyType/male",headers: {},};

      axios(config).then(function (response) {
        response.data.data.map((u) => {
          switch (u.bodyType) {
            case "standard":
              body.push({ bodyType: "스탠다드",imgurl: u.imgurl,key: 1 });
              break;
            case "reverseTriangle":
              body.push({ bodyType: "역삼각형",key: 2 });
              break;
            case "triangle":
              body.push({ bodyType: "삼각형",key: 3 });
              break;
            case "circle":
              body.push({ bodyType: "원형",key: 4 });
              break;
            case "hourglass":
              body.push({ bodyType: "직사각형",key: 5 });
              break;
          }
        });
        return setBodyType(body);
      });
    } catch (err) {
      console.log(err);
    }
  };
  useEffect(() => {
    const unsubscribe = navigation.addListener("focus",() => {
      bodyGetData();
    });
    return unsubscribe;
  },[navigation]);

  const onClick = (e) => {
    console.log(e);
    bodyType.map((u) => {
      switch (u.bodyType) {
        case u.bodyType === "스탠다드":
          setSelected(!isSelected);
          console.log(isSelected);
          break;
        case "역삼각형":
          setSelected(!isSelected);
          break;
      }
    });
  };

  return (
    <View style={styles.container}>
      <Text
        style={{ fontSize: wp("5.5%"),fontWeight: "bold",marginBottom: 21 }}
      >
        자신의 체형을 선택해 주세요
      </Text>
      <View style={{ flexDirection: "row",marginBottom: hp("10%") }}>
        <Text style={{ fontSize: wp("4.5%"),marginRight: wp("1%") }}>
          더 정확한 평가를 받으실 수 있습니다
        </Text>
        <Image
          source={require("../../images/smile.png")}
          style={{ marginTop: hp("0.5%") }}
        />
      </View>
      <ScrollView horizontal={true} showsHorizontalScrollIndicator={true}>
        {bodyType.map((data) => (
          <>
            <TouchableHighlight
              style={styles.bodySelect}
              value={data.bodyType}
              onPress={onClick}
              // onPress={() => bouncyCheckBoxRef?.onPress()}
            >
              <>
                <BouncyCheckBox
                  isChecked={!isSelected}
                  ref={(ref) => (bouncyCheckBoxRef = ref)}
                  size={25}
                  fillColor="black"
                  unfillColor="#FFFFFF"
                  iconStyle={{ borderColor: "white" }}
                  textStyle={{ fontFamily: "JosefinSans-Regular" }}
                  disableBuiltInState
                  onPress={onClick}
                  style={{
                    alignSelf: "flex-start",marginLeft: wp("3%"),marginTop: hp("2%"),}}
                />
                <SvgCssUri
                  uri={data.imgurl}
                  width="90%"
                  height="60%"
                  marginTop="-5%"
                  key={data.key}
                />
                <Text style={styles.bodytype}>{data.bodyType}</Text>
              </>
            </TouchableHighlight>
          </>
        ))}
      </ScrollView>
      <TouchableHighlight
        style={styles.button}
        onPress={() => {
          navigation.navigate("얼굴형 정보 입력");
        }}
        underlayColor="gray"
      >
        <>
          <Text style={styles.text}>선택 완료</Text>
        </>
      </TouchableHighlight>
    </View>
  );
};
const styles = StyleSheet.create({
  container: {
    justifyContent: "center",alignItems: "center",marginTop: hp("5%"),},button: {
    justifyContent: "center",width: wp("70%"),height: hp("7%"),color: "white",backgroundColor: "black",borderRadius: 10,marginTop: hp("17%"),text: {
    color: "white",fontSize: wp("5.2%"),bodySelect: {
    marginLeft: 16,marginRight: 16,height: hp("35%"),borderRadius: 30,backgroundColor: "#ffffff",shadowColor: "#000",shadowOffset: {
      width: 0,height: 3,shadowOpacity: 0.25,shadowRadius: 3.84,elevation: 5,bodytype: {
    marginTop: hp("3%"),fontSize: wp("8%"),});
export default Select;

解决方法

此示例说明如何选择单个选项。
执行以下步骤:

  //define state to save selected value inside it
  const [selected,setSelected] = React.useState();
  //handle item onPress
  const onPress = (item) => {
      setSelected(item);
  }
  //check if item selected
  const isSelected = (item) => {
      return selected?.unique_id === item.unique_id;
  }
  //and in render function
  <ScrollView>
     {
        data.map((item,index) => {
            return(
              <ItemComponent
                onPress={() => setSelected(item)}
                style={isSelected(item) ? selectedStyle : defaultStyle}>
              
              </ItemComponent>
            )
        })
     }
  </ScrollView>

全码试吃零食here

import * as React from 'react';
import { Text,View,StyleSheet,ScrollView,TouchableOpacity} from 'react-native';


export default function App() {


  const [selected,setSelected] = React.useState();

  const data = [
    {
      unique_id : 1,text : "item one"
    },{
      unique_id : 2,text : "item two"
    },{
      unique_id : 3,text : "item three"
    },{
      unique_id : 4,text : "item four"
    }
  ];


  const onPress = (item) => {
      setSelected(item);
  }

  const isSelected = (item) => {
      return selected?.unique_id === item.unique_id;
  }


  return (
      <ScrollView>
        {
          data.map((item,index) => {
            return(
              <TouchableOpacity
                key={item.unique_id}
                onPress={() => {
                    setSelected(item);
               }}
               style={{
                 padding : 25,margin : 10,backgroundColor : isSelected(item) ? "red" : "#eee"
                 }}
               >
               <Text>{item.text}</Text>

               </TouchableOpacity>
            )
          })
        }

      </ScrollView>
  );
}


enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?