Тематика для React Native с использованием React Native ui kitten

Я пытаюсь использовать react-native-ui-kitten для реагирования на нативные компоненты, и он отлично работает. В последнее время я хотел добавить темы в свое приложение и для этого использовал их «RkTheme» и «RkType», но ни один из них не работает.

Ожидание - установка темы с помощью RkTheme.setTheme (themeJson) должна изменить стиль элементов, уже отображаемых на экране.

Актуально - установка темы с помощью RkTheme.setTheme (themeJson) не меняет стиль уже визуализированных компонентов.

Ниже представлена ​​часть пакета json

  "dependencies": {
"prop-types": "^15.6.1",
"react": "16.2.0",
"react-dom": "^16.3.1",
"react-native": "0.51.0",
"react-native-linear-gradient": "^2.4.0",
"react-native-popup-menu": "^0.9",
"react-native-ui-kitten": "3.1.2",
"react-native-vector-icons": "^4.6.0",
"react-navigation": "1.0.0-beta.11",
"react-redux": "^5.0.7",
"realm": "^2.15.3",
"redux": "^3.7.2",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"util": "^0.11.0",

},

Пример кода для компонента React

    import React from 'react'
import { StyleSheet, Text, View, Image, Button , TouchableOpacity} from 'react-native'
import {applyTheme} from '../config/bootstrap'
import {RkStyleSheet, RkTheme} from 'react-native-ui-kitten'
import { LightTheme } from '../config/lightTheme';
import { DarkTheme } from '../config/darkTheme';
export default class Sample extends React.Component {
  constructor(props){
    super(props)
    this.changeTheme = this.changeTheme.bind(this)
  }
  changeTheme(theme){
    if (theme){
      RkTheme.setTheme(DarkTheme,null)
    } else {
      RkTheme.setTheme(LightTheme,null)
    }
  }
  render() {
    return (
      <View style = {styles.container}>
        <Text>Sample</Text>
        <TouchableOpacity  onPress = { (e) => this.changeTheme(false) }>
          <Text style = {styles2.button1}>Apply Light</Text>
        </TouchableOpacity>
        <TouchableOpacity   onPress = { (e) => this.changeTheme(true) }>
          <Text style = {styles2.button1}>Apply Dark</Text>
        </TouchableOpacity>
      </View>
    )
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
})
const styles2 = RkStyleSheet.create(theme => ({
  button1 : {
    color : theme.colors.secondaryColor
  }
}))

Какой второй параметр у вашего метода RkTheme.setTheme(DarkTheme,null)?

Felix Too 14.10.2018 13:31

Спасибо за ваш ответ. Я проверил метод setTheme в библиотеке. У него всего один параметр. Я использовал оба параметра, потому что именно так они поступили в одном из своих демонстрационных приложений. RkTheme.setTheme (DarkTheme, null) и RkTheme.setTheme (DarkTheme) не работают

Anurag Thakur 14.10.2018 16:20

Я посмотрел на .setTheme (), и он объединяет существующую тему и новую. Я не знаю, к чему это может привести.

Felix Too 14.10.2018 19:05

Вы сталкивались с их основными документами? Ваш метод должен работать согласно этому документу [1]: akveo.github.io/react-native-ui-kitten/#/docs/quick-start/th‌ eme

Felix Too 14.10.2018 19:14

В их демонстрационном приложении ссылка на которое доступна по адресу github.com/akveo/kittenTricks/blob/master/README.md, изменение темы изменяет стили компонентов в реальном времени. Я попытался использовать тот же код, что и в моем вопросе, в их демонстрационном приложении, и он работал нормально. Он менял цвет текста «Применить свет» и «Применить темный», как только я их нажал. Единственная разница, которую я вижу в своем коде и в их коде, заключается в том, что они используют собственный sdk expo react, а я использую response native из npm.

Anurag Thakur 15.10.2018 04:03

Хорошо, я понял, что делаю здесь не так. Я не использовал withRkTheme для Sample в моем навигаторе стека. Тем не менее, я не вижу никаких изменений при использовании connect (mapStateToProps, mapDispatchToProps) (withRkTheme (Sample)) в моем образце контейнера, поскольку я использую redux.

Anurag Thakur 15.10.2018 19:17

Отлично, у тебя это работает

Felix Too 15.10.2018 22:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
7
3 371
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Нам нужно добавить withRkTheme к компонентам, которые, как мы предполагаем, будут изменять цвета темы в реальном времени после изменения темы. Также важно отметить, что если мы используем какие-либо другие пользовательские компоненты в функции рендеринга корневого компонента, пользовательские компоненты должны расширять «RkComponent» вместо «React.Component».. Это самостоятельно устранило мою проблему.

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