Как установить значение в текстовом компоненте, когда я нажал на элемент плоского списка в реагирующем родном? - PullRequest
0 голосов
/ 13 февраля 2020

Как установить значение для текстового компонента, когда я щелкнул элемент плоского списка в реагирующем родном?

Я хочу отобразить значение плоского списка в текстовом компоненте. Когда я нажал на элемент плоского списка. Поэтому, пожалуйста, помогите мне, как я могу достичь этой функциональности.

enter image description here

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

передайте функцию onselect аргумента, используя приведенный ниже код, и проверьте

import React from 'react';
import {
  SafeAreaView,
  TouchableOpacity,
  FlatList,
  StyleSheet,
  Text,
  TextInput
} from 'react-native';
import Constants from 'expo-constants';

const DATA = [
  {
    id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
    title: 'First Item',
  },
  {
    id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
    title: 'Second Item',
  },
  {
    id: '58694a0f-3da1-471f-bd96-145571e29d72',
    title: 'Third Item',
  },
];

function Item({ id, title, selected, onSelect }) {
  return (
    <TouchableOpacity
      onPress={() => {onSelect(id)}}
      style={[
        styles.item,
        { backgroundColor: selected ? '#6e3b6e' : '#f9c2ff' },
      ]}
    >
      <Text style={styles.title}>{title}</Text>
    </TouchableOpacity>
  );
}

export default function App() {
  const [selected, setSelected] = React.useState(new Map());
  const [textValue, setValueText] = React.useState("");

  const onSelect = React.useCallback(
    id => {
      const newSelected = new Map(selected);
      newSelected.set(id, !selected.get(id));

      setSelected(newSelected);
      setValueText(id)
    },
    [selected],
  );

  const showTitle = (title) =>{
    setValueText(title)
  }

  return (
    <SafeAreaView style={styles.container}>
     <TextInput style={{height:80,width:300}} value={textValue}/>
      <FlatList
        data={DATA}
        renderItem={({ item }) => (
          <Item
            id={item.id}
            title={item.title}
            selected={!!selected.get(item.id)}
            onSelect={()=>showTitle(item.title)}
          />
        )}
        keyExtractor={item => item.id}
        extraData={selected}
      />

    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: Constants.statusBarHeight,
  },
  item: {
    backgroundColor: '#f9c2ff',
    padding: 20,
    marginVertical: 8,
    marginHorizontal: 16,
  },
  title: {
    fontSize: 32,
  },
});
0 голосов
/ 13 февраля 2020

Это рабочий пример, как показано ниже, пожалуйста, также найдите код, и если у вас есть какие-либо сомнения, пожалуйста, проверьте:

Экспо-закуска

import React from 'react';
import {
  SafeAreaView,
  TouchableOpacity,
  FlatList,
  StyleSheet,
  Text,
  TextInput
} from 'react-native';
import Constants from 'expo-constants';

const DATA = [
  {
    id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
    title: 'First Item',
  },
  {
    id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
    title: 'Second Item',
  },
  {
    id: '58694a0f-3da1-471f-bd96-145571e29d72',
    title: 'Third Item',
  },
];

function Item({ id, title, selected, onSelect }) {
  return (
    <TouchableOpacity
      onPress={() => {onSelect(id)}}
      style={[
        styles.item,
        { backgroundColor: selected ? '#6e3b6e' : '#f9c2ff' },
      ]}
    >
      <Text style={styles.title}>{title}</Text>
    </TouchableOpacity>
  );
}

export default function App() {
  const [selected, setSelected] = React.useState(new Map());
  const [textValue, setValueText] = React.useState(0);

  const onSelect = React.useCallback(
    id => {
      const newSelected = new Map(selected);
      newSelected.set(id, !selected.get(id));

      setSelected(newSelected);
      setValueText(id)
    },
    [selected],
  );

  return (
    <SafeAreaView style={styles.container}>
     <TextInput style={{height:80,width:300}} value={textValue}/>
      <FlatList
        data={DATA}
        renderItem={({ item }) => (
          <Item
            id={item.id}
            title={item.title}
            selected={!!selected.get(item.id)}
            onSelect={onSelect}
          />
        )}
        keyExtractor={item => item.id}
        extraData={selected}
      />

    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: Constants.statusBarHeight,
  },
  item: {
    backgroundColor: '#f9c2ff',
    padding: 20,
    marginVertical: 8,
    marginHorizontal: 16,
  },
  title: {
    fontSize: 32,
  },
});

Надеюсь помогает. не стесняйтесь сомнений

...