У меня возникли проблемы с поиском документации/видео о передаче моего состояния компоненту другого документа

у меня есть панель поиска в контейнере, я устанавливаю состояние «поиск» при изменении текста.. и я хочу передать это состояние вложенному компоненту (в отдельном документе), чтобы он мог фильтровать отображаемые изображения на основе состояния поиска.

я пробовал везде искать и импортировать/экспортировать поиск. Я также бесконечно гуглил это и не мог найти ничего, относящегося к проблеме. может у меня не правильная терминология.

В папке Components есть папка AppTabNavigator, которая содержит этот файл под названием HomeTab.js. Я пытаюсь передать состояние из HomeTab.js в CardComponent.js, вставленное ниже.

import React, { Component } from 'react';
import { StyleSheet } from 'react-native';
import { Container, Content, Icon } from 'native-base';
import CardComponent from '../CardComponent';
import { SearchBar } from 'react-native-elements';

class HomeTab extends Component {
  static navigationOptions = {
    tabBarIcon: ({ tintColor }) => (
      <Icon name = "ios-search" style = {{ color: tintColor }} />
    )
  };

  state = {
    search: ''
  };
  updateSearch = search => {
    this.setState({ search });
    console.warn(search);
  };

  render() {
    const { search } = this.state;

    return (
      <Container style = {styles.container}>
        <SearchBar
          containerStyle = {{ backgroundColor: 'transparent' }}
          placeholder = "Filter for..."
          placeholderTextColor = "white"
          onChangeText = {this.updateSearch}
          value = {search}
        />
        <Content>
          <CardComponent search = {this.state.search} />
        </Content>
      </Container>
    );
  }
}
export default HomeTab;

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'black'
  }
});

Папка Components, содержащая папку AppTabNavigator, также содержит этот файл с названием CardComponent.js... Я пытаюсь передать состояние в CardComponent.js из HomeTab.js

import React, { Component } from 'react';
import { View, Dimensions, Image, Text, TouchableOpacity } from 'react-native';

var images = [
  require('../assets/IMG-0028.jpeg'),
  require('../assets/IMG-0048.jpeg'),
  require('../assets/IMG-0064.jpeg'),
  require('../assets/IMG-0089.jpeg'),
  require('../assets/IMG-0119.jpeg'),
  require('../assets/IMG-0151.jpeg'),
  require('../assets/IMG-0152.jpeg'),
  require('../assets/IMG-0153.jpeg'),
  require('../assets/IMG-0154.jpeg'),
  require('../assets/IMG-0155.jpeg'),
  require('../assets/IMG-0184.jpeg'),
  require('../assets/IMG-0221.jpeg'),
  require('../assets/IMG-0268.jpeg'),
  require('../assets/IMG-0309.jpeg'),
  require('../assets/IMG-0320.jpeg'),
  require('../assets/IMG-0474.jpeg'),
  require('../assets/IMG-0707.jpeg'),
  require('../assets/IMG-0860.jpeg')
];
var { width, height } = Dimensions.get('window');

class CardComponent extends Component {
  renderHome = () => {
         console.info(search);
    return images.map((image, index) => {
      return (
        <TouchableOpacity onPress = {() => console.warn(index)} key = {index}>
          <View
            key = {index}
            style = {[
              { width: width / 3 },
              { height: height / 3 },
              { marginBottom: 2 },
              index % 3 !== 0 ? { paddingLeft: 2 } : { paddingLeft: 0 }
            ]}
          >
            <Image
              style = {{ flex: 1, width: undefined, height: undefined }}
              source = {image}
            />
          </View>
        </TouchableOpacity>
      );
    });
  };
  render() {
    return (
      <View style = {{ flexDirection: 'row', flexWrap: 'wrap' }}>
        {this.renderHome()}
      </View>
    );
  }
}
export default CardComponent;

Ожидается, что я смогу искать свои изображения по идентификатору, чтобы затем научиться помечать их в приложении и искать эти теги. Фактическими результатами были разочарование и потерянное время.

Я не вдавался во все подробности, поэтому могу что-то упустить... Если вы хотите передать состояние в CardComponent, почему бы вам не написать в HomeTab: <CardComponent search = {this.state.search} /> ?

Yossi 07.04.2019 19:19

Кажется, это имеет смысл. Но я не могу заставить console.info(search) работать с CardComponent.js, что указывает на то, что он не получает информацию.

infinesse 07.04.2019 19:30

Что вы получаете в console.info?

Yossi 07.04.2019 19:34

ReferenceError: не удается найти переменную: поиск

infinesse 07.04.2019 19:44

Можете ли вы обновить код, чтобы он включал console.info?

Yossi 07.04.2019 19:45

Конечно, сделано. Я обновил оба файла.

infinesse 07.04.2019 19:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновленный код CardComponent:

class CardComponent extends Component {
  renderHome = () => {
         console.info(this.props.search);
    return images.map((image, index) => {
      return (
        <TouchableOpacity onPress = {() => console.warn(index)} key = {index}>
          <View
            key = {index}
            style = {[
              { width: width / 3 },
              { height: height / 3 },
              { marginBottom: 2 },
              index % 3 !== 0 ? { paddingLeft: 2 } : { paddingLeft: 0 }
            ]}
          >
            <Image
              style = {{ flex: 1, width: undefined, height: undefined }}
              source = {image}
            />
          </View>
        </TouchableOpacity>
      );
    });
  };
  render() {
    return (
      <View style = {{ flexDirection: 'row', flexWrap: 'wrap' }}>
        `{this.renderHome.bind(this)()}`
      </View>
    );
  }
}
export default CardComponent;

Прекрасный! Спасибо большое. у вас случайно нет быстрого решения для рендеринга результатов поиска вместо всего массива, не так ли?

infinesse 07.04.2019 20:54

Я доволен. Я постараюсь найти время. Никаких обещаний... В случае, если я этого не сделаю, удачи :)

Yossi 07.04.2019 21:53

Другие вопросы по теме