Как создать домашний экран с помощью gridview в React Native?

Мне нужно создать домашний экран с сеткой в ​​react-native. И это представление сетки должно содержать четыре кнопки изображения. Каждая кнопка изображения должна перенаправлять на разные страницы. Я использую пакет react-native-super-grid.

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
1 661
4

Ответы 4

Если вам нужно всего 4 кнопки изображения, то не нужно делать сложную сетку. Используйте только приведенный ниже код, и если вам нужен сложный пояс, чем используйте это видео YouTube ссылка на сайт для лучшего понимания.

    import React, { Component } from 'react';
import { AppRegistry, View,Image } from 'react-native';

export default class FlexDirectionBasics extends Component {
  render() {
    return (
      // Try setting `flexDirection` to `column`.
      <View style = {{flex: 1, }}>
         <View style = {{flex: 1, flexDirection: 'row', }}>
        <Image source = {{uri: 'https://facebook.github.io/react/logo-og.png'}}
       style = {{flex:1}} />
        <Image source = {{uri: 'https://cdn-images-1.medium.com/max/512/1*qUlxDdY3T-rDtJ4LhLGkEg.png'}}
       style = {{flex:1}} />

      </View>
  <View style = {{flex: 1, flexDirection: 'row', }}>
      <Image source = {{uri: 'https://rawgit.com/gorangajic/react-icons/master/react-icons.svg'}}
       style = {{flex:1}} />

        <Image  source = {{uri: 'https://facebook.github.io/react/logo-og.png'}}
       style = {{flex:1}} />

      </View>
      </View>
    );
  }
};

// skip this line if using Create React Native App
AppRegistry.registerComponent('AwesomeProject', () => FlexDirectionBasics);

Сообщите мне, если потребуется дополнительное обсуждение

Спасибо за ответ, я использую непрозрачность Touchable. Когда пользователь нажимает кнопку, он должен перенаправлять на разные страницы.

Thara 27.08.2018 08:52

Привет анил, пользуюсь этим npmjs.com/package/react-native-super-grid. вместо текста мне нужна кнопка для кнопки, я использовал сенсорную прозрачность.

Thara 27.08.2018 09:39

но почему только кнопка. я думаю, что осязаемая непрозрачность лучше, чем кнопка

anil sidhu 27.08.2018 10:31

Я использую только осязаемую непрозрачность. Но моя проблема в том, что в рендере есть 4 элемента, а в рендеринге я добавил четыре кнопки, когда я запускаю приложение, оно показывает 12. элементы рендеринга происходят дважды.

Thara 27.08.2018 10:40

Здравствуйте, Анил, проверьте код, который я добавил выше stackoverflow.com/a/52035858/7818289

Thara 27.08.2018 11:03

Вы можете установить «npm install react-native-super-grid» и попробовать это. Вы можете изменить itemDimension, тогда он изменит количество значков, которые должны отображаться на экране. Это всего лишь образец, вы можете изменить то, что вам нужно.

import React, { Component } from "react";
import {
  StyleSheet,
  View,
  Text,
  TouchableOpacity,
  PixelRatio,
  Image
} from "react-native";
import { Container, Header, Content } from "native-base";
import GridView from "react-native-super-grid";

const buttons = [
  {
name: "test1",
image: require("./src/icons/test1.png"),
key: 1
  },
  {
name: "test2",
image: require("./src/icons/test2.png"),
key: 2
  },
  {
name: "test3",
image: require("./src/icons/test3.png"),
key: 3
  },
  {
name: "test4",
image: require("./src/icons/test4.png"),
key: 4
  },
];

class Home extends Component {

  constructor(props) {
    super(props);
  }

  onPress(){
  
  }
  render() {
    return (
      <Container style = {styles.container}>
        <Content contentContainerStyle = {styles.contentContainerStyle}>
          <GridView
            itemDimension = {180}
            items = {buttons}
            renderItem = {item => (
              <View style = {styles.gridCompenentContainer}>
                <TouchableOpacity
                  onPress = {this.onPress.bind(this)}
                  activeOpacity = {0.8}
                  style = {styles.touchView}
                >
                  <Image
                    style = {{ width: 60, height: 60 }}
                    source = {item.image}
                  />
                </TouchableOpacity>
                <View style = {styles.textView}>
                  <Text style = {styles.text}>{item.name}                     </Text>
                </View>
              </View>
            )}
          />
        </Content>
      </Container>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: "#fff"
  },
  contentContainerStyle: {
    backgroundColor: "#fff",
    justifyContent: "center"
  },
  gridCompenentContainer: {
    width: 160,
    height: 140,
    flexDirection: "column",
    justifyContent: "center",
    alignItems: "center"
  },
  touchView: {
    width: 80,
    justifyContent: "center",
    alignItems: "center",
    height: 80,
    borderRadius: 40,
    backgroundColor: "#0099cc"
  },
  textView: {
    width: 140,
    height: 50,
    justifyContent: "center",
    alignItems: "center"
  },
  text: {
    width: 140,
    fontSize: 12,
    textAlign: "center",
    color: "#0099cc"
  }
});

export default Home;

Naveen, когда я запускаю ваш код с помощью snack.expo, он показывает ошибку, поскольку "undefined не является объектом (оценка '_this2.onPressButton.bind')"

Thara 27.08.2018 11:05

извините, это должно быть изменение onPress.bind (this), а не onPressButton.bind (this)

Naleen Dissanayake 27.08.2018 12:21

Вы должны добавить путь к изображению, который вы использовали

Naleen Dissanayake 27.08.2018 12:22

это не навигация

Thara 27.08.2018 18:40

Что ты хочешь делать? пожалуйста, дайте здесь краткое объяснение. я помогу тебе

Naleen Dissanayake 27.08.2018 19:12

Вот код согласно пользовательскому пакету.

Функция RenderItem работает как цикл.

когда вы поместите 4 объекта в массив разделов, RenderItem сделает цикл 4 раза.

export default class App extends React.Component {

    render() {
        return (
            <View style = {styles.container}>

                <Image style = {styles.img} source = {require('./assets/3.jpg')} />
                <SuperGridSectionList
                    itemDimension = {130}

                    sections = {[
                        {
                            // all your style and data will be here according to your grid package
                            data: [

                                { name: '1' }, { name: '2' },
                                { name: '3' }, { name: '4' },

                            ]
                        }
                    ]}

                    style = {styles.gridView}
                    renderItem = {({ item }) => (
                        <View style = {styles.buttonContainer}>

                            <TouchableOpacity style = {styles.button} onPress = {() => { alert("clicked me") }}>
                                <Image source = {require("./assets/set2.png")} />
                            </TouchableOpacity>

                        </View>

Спасибо, Анил, но мне нужно четыре изображения для кнопки (1,2,3,4). так что он будет перенаправлять на соответствующие страницы.

Thara 27.08.2018 11:44

чем использовать URL изображений, например эти данные: [{name: '1', url: 'www.imag.com/abc.jph'}, {name: '2'}, {name: '3'}, {name: '4'},] вот и все

anil sidhu 27.08.2018 12:05

Спасибо. Как вытолкнуть каждый элемент из данных раздела? так что если пользователь нажимает 1 или 2, он перенаправляет на соответствующие страницы. Но теперь все страницы перенаправляются на одну и ту же страницу.

Thara 27.08.2018 14:21

у вас есть динамические данные или статические данные

anil sidhu 27.08.2018 14:26

статические данные как статические navigationOptions = {title: 'MainHome',};

Thara 27.08.2018 14:30

Пожалуйста, проверьте это Я отредактировал свой ответ, stackoverflow.com/a/52035858/7818289. Как onPress будет работать динамически?

Thara 28.08.2018 03:03

thara ### обратитесь к этому, чтобы узнать, как реализовать реагирующую навигацию или официальную документацию Реагировать на навигацию.

Вы можете добавить маршрут для события нажатия кнопки. как

        
        
        onPress = {() =>
          this.props.navigation.navigate('screen2');
        }

https://facebook.github.io/react-native/docs/navigation#react-navigation

позвольте мне дать немного времени, я перешлю вас.

Naleen Dissanayake 28.08.2018 05:39

это работает. с какой проблемой вы столкнулись? Если у вас возникла проблема, укажите ее здесь, или я пришлю вам образец проекта.

Naleen Dissanayake 28.08.2018 16:54

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