点击自定义主题导致模拟器直接卡死

来源:11-1 构建自定义多彩主题页面

慕仔3427096

2018-08-30

在my页面里点击自定义主题 模拟器立即卡死 什么也点不了 但是我的里的列表可以滚动 不知道为什么 刚开始的时候modal还能出来,突然就不行了
必须重新加载代码才能点,但是一点自定义又卡死 也没开debug啥的 
不知道是不是数据请求造成的
自定义主题页
import React from 'react';
import { View, Text, Image, ScrollView, TouchableHighlight, Modal, StyleSheet, Platform } from 'react-native';
import globalStyle from '../../assets/styles/globalStyle';
import { ThemeFlags } from '../../assets/styles/themeFactory';

export default class CustomTheme extends React.Component {
  constructor(props) {
    super(props);
  }
  getThemeItemView(key) {
    return <TouchableHighlight
             style={{flex: 1}}
             underlayColor={'#ffffff'}
             onPress={() => this.onSelectTheme(key)}
           >
              <View style={[{backgroundColor: ThemeFlags[key]},styles.themeItem]}>
                <Text style={styles.themeText}>{key}</Text>
              </View>
           </TouchableHighlight>
  }
  onSelectTheme(key) {
    this.props.onClose()
  }
  renderThemView() {
    let views = [];
    let keys =  Object.keys(ThemeFlags);
    for (var i = 0; i < keys.length; i+=3) {
      views.push(
        <View key={i} style={{flexDirection: 'row'}}>
          {this.getThemeItemView(keys[i])}
          {this.getThemeItemView(keys[i+1])}
          {this.getThemeItemView(keys[i+2])}
        </View>
      )
    }
    console.log(views)
    return views
  }
  renderThemeContent() {
    return <Modal
              animationType={"slide"}
              transparent={true}
              visible={this.props.visible}
              onRequestClose={() => this.props.onClose()}
           >
              <View style={styles.modalContainer}>
                <ScrollView>
                  {this.renderThemView()}
                </ScrollView>
              </View>
           </Modal>
  }
  render() {
    let view = this.props.visible ? <View style={globalStyle.root_container}>
      {this.renderThemeContent()}
    </View>:null
    return view
  }
}

const styles = StyleSheet.create({
  modalContainer: {
    flex: 1,
    margin:10,
    marginTop:Platform.OS==='ios'?20:10,
    backgroundColor:'white',
    borderRadius:3,
    shadowColor:'gray',
    shadowOffset:{width:2,height:2},
    shadowOpacity:0.5,
    shadowRadius:2,
    padding:3
  },
  themeItem: {
    flex: 1,
    height: 120,
    margin:3,
    padding:3,
    borderRadius:2,
    alignItems: 'center',
    justifyContent: 'center',
  },
  themeText:{
      color:'#ffffff',
      fontWeight:'500',
      fontSize:16
  }
})

我的页面

import React from 'react';

import { View, Text, Image, ScrollView, TouchableHighlight, StyleSheet } from 'react-native';

import NavigationBar from '../commons/navigationBar';

import { FLAG_LANGUAGE } from '../commons/LanguageDao';

import { MORE_MENU } from '../commons/MoreMenu';

import globalStyle from '../../assets/styles/globalStyle';

import viewUtils from '../../tools/viewUtils';

import CustomTheme from './CustomTheme';


export default class My extends React.Component {

  constructor(props) {

    super(props);

    this.state = {

      isShowCustomeTheme: false

    }

  }

  onclick(tag) {

    let targetRouteName, params = {};

    switch (tag) {

      case MORE_MENU.Custom_Language:

        targetRouteName = 'CustomKeyPage';

        params.flag = FLAG_LANGUAGE.flag_language;

        break;

      case MORE_MENU.Sort_Language:

        targetRouteName = 'SortKeyPage';

        params.flag = FLAG_LANGUAGE.flag_language;

        break;

      case MORE_MENU.Custom_Key:

        targetRouteName = 'CustomKeyPage';

        params.flag = FLAG_LANGUAGE.flag_key;

        break;

      case MORE_MENU.Sort_Key:

        targetRouteName = 'SortKeyPage';

        params.flag = FLAG_LANGUAGE.flag_key;

        break;

      case MORE_MENU.Remove_Key:

        targetRouteName = 'CustomKeyPage';

        params.flag = FLAG_LANGUAGE.flag_key;

        params.isRemove = true;

        break;

      case MORE_MENU.Custom_Theme:

        this.setState({isShowCustomeTheme: true})

        break;

      case MORE_MENU.About_Author:

        targetRouteName = 'AboutMe'

        break;

      case MORE_MENU.About:

        targetRouteName = 'About';

        break;

    }

    if (targetRouteName) {

      this.props.navigation.navigate(targetRouteName, params)

    }

  }

  getItem(tag, icon, text) {

    return viewUtils.getSettingItem(() => this.onclick(tag), icon, text, {tintColor: '#2196f3'}, null)

  }

  renderCustomTheme() {

    return (

      <CustomTheme

        {...this.props}

        visible={this.state.isShowCustomeTheme}

        onSelectTheme={(themeKey) => this.onSelectTheme(themeKey)}

        onClose={() => this.setState({isShowCustomeTheme: false})}

      />

    )

  }

  render() {

    return (

      <View style={globalStyle.root_container}>

        <NavigationBar title="我的" />

        <ScrollView>

          <TouchableHighlight

            onPress={() => this.onclick(MORE_MENU.About)}

          >

            <View style={[styles.item, {height: 90}]}>

              <View style={styles.itemLeft}>

                <Image

                  source={require('../../assets/images/ic_trending.png')}

                  style={[{width: 40,height: 40,marginRight: 10}, {tintColor: '#2196f3'}]}

                />

                <Text>GitHub Popular</Text>

              </View>

              <Image

                source={require('../../assets/images/ic_tiaozhuan.png')}

                style={[{width: 22,height: 22,marginRight: 10}, {tintColor: '#2196f3'}]}

              />

            </View>

          </TouchableHighlight>

          <View style={globalStyle.line} />

          {/*语言管理*/}

          <Text style={styles.groupTitle}>语言管理</Text>

          <View style={globalStyle.line} />

          {this.getItem(MORE_MENU.Custom_Language, require('../../assets/images/ic_custom_language.png'), '自定义语言')}

          <View style={globalStyle.line} />

          {/*语言排序*/}

          {this.getItem(MORE_MENU.Sort_Language, require('../../assets/images/ic_swap_vert.png'), '语言排序')}


          {/*标签管理*/}

          <Text style={styles.groupTitle}>标签管理</Text>

          <View style={globalStyle.line} />

          {this.getItem(MORE_MENU.Custom_Key, require('../../assets/images/ic_custom_language.png'), '自定义标签')}

          <View style={globalStyle.line} />

          {/*标签排序*/}

          {this.getItem(MORE_MENU.Sort_Key, require('../../assets/images/ic_swap_vert.png'), '标签排序')}


          {/*标签移除*/}

          <View style={globalStyle.line} />

          {this.getItem(MORE_MENU.Remove_Key, require('../../assets/images/ic_remove.png'), '标签移除')}


          {/*设置*/}

          <Text style={styles.groupTitle}>设置</Text>

          <View style={globalStyle.line} />

          {/*自定义主题*/}

          {this.getItem(MORE_MENU.Custom_Theme, require('../../assets/images/ic_view_quilt.png'), '自定义主题')}

          <View style={globalStyle.line} />

          <View style={globalStyle.line} />

          {/*关于作者*/}

          {this.getItem(MORE_MENU.About_Author, require('../../assets/images/ic_insert_emoticon.png'), '关于作者')}

          <View style={globalStyle.line} />

        </ScrollView>

        {this.renderCustomTheme()}

      </View>

    )

  }

}


const styles = StyleSheet.create({

  container: {

    flex: 1,

  },

  item: {

    flexDirection: 'row',

    alignItems: 'center',

    justifyContent: 'space-between',

    padding: 10,

    height: 60,

    backgroundColor: '#fff'

  },

  itemLeft: {

    flexDirection: 'row',

    alignItems: 'center'

  },

  groupTitle: {

    marginLeft: 10,

    marginTop: 10,

    marginBottom: 5,

    fontSize: 12,

    color: 'gray'

  }

})

好像是有时候卡死有时候只是有点卡,弹框能出来 如果我把debug打开 反而不卡了 真是神奇。。。。。还老报这种警告

http://img.mukewang.com/szimg/5b87b6be0001948806631180.jpg

写回答

1回答

CrazyCodeBoy

2018-08-31

这种情况比较诡异试下下面这种方式:

  • 关闭终端,删除node_modules 删除APP,或换个模拟器重新安装运行;


0
0

React Native技术精讲与高质量上线App开发

一个真实的上线项目,一次完整的开发过程,全面掌握React Native技术

1577 学习 · 727 问题

查看课程