小编ami*_*rfl的帖子

在存储使用redux-persist重新水合之前加载初始状态的默认值

应用程序启动后使用redux-persist访问保存的数据时遇到问题.

reducer使用我初始状态中定义的数据进行初始化.当前一个会话的状态加载AsyncStorage时,该组件已显示默认数据.

我知道数据已成功保存和获取.如果我将屏幕留给另一个并回到它,我可以看到数据显示正确.调试状态和道具也表明这是一个异步计时问题.

如何在商店补充水分后延迟加载redux容器.或者,我可以在商店完成加载时强制更新conatainer(及其子代)以进行更新吗?

这是我尝试过的.配置我的商店:

export default function configureStore(initialState) {
    const middlewares = [thunk];
    if (process.env.NODE_ENV === `development`) {
        const createLogger = require(`redux-logger`);
        const logger = createLogger();
        middlewares.push(logger);
    }

    let store = compose(
        applyMiddleware(...middlewares),
        autoRehydrate() )(createStore)(reducers);

        persistStore(store, {blacklist: ['routing'], storage: AsyncStorage}, () => {
            store.dispatch(storeRehydrateComplete())
        })


    return store
}
Run Code Online (Sandbox Code Playgroud)

希望这会更新所有其他组件(因为redux中的所有reducer都在一个动作中被调用),我尝试创建一个在商店完成加载时触发的动作:

import { REHYDRATE_STORE } from './types'

export function storeRehydrateComplete(){
    return {
        type: REHYDRATE_STORE,
    }
}
Run Code Online (Sandbox Code Playgroud)

它是reducer:从{./actions/types'const initialState = {storeIsReady:false}导入{REHYDRATE_STORE}

export default function reducer(state = initialState, action){
    switch (action.type) …
Run Code Online (Sandbox Code Playgroud)

react-native redux asyncstorage

16
推荐指数
1
解决办法
4458
查看次数

RNMK - 超级表达式必须为null或函数

将我的项目升级到React-Native 0.26后,应用程序崩溃并出现以下错误:

"超级表达式必须为null或函数,而不是未定义"

它在Switch.js文件中崩溃,该文件属于React-Native-Material-Kit软件包.

在此输入图像描述

react-native

13
推荐指数
1
解决办法
4194
查看次数

如何根据运行时系统iOS版本覆盖方法?

我已经使用iOS实现了iOS 8的自动动态tableview单元格高度

self.tableView.rowHeight = UITableViewAutomaticDimension;
Run Code Online (Sandbox Code Playgroud)

对于不支持自动动态单元格高度的iOS 8之前的版本,我重写了heightForRowAtIndexPath方法.

这与我的做法类似:在UITableView中使用自动布局进行动态单元布局和可变行高

问题是如何编写使用iOS 8自动单元格高度的代码,但是为早期iOS版本覆盖heightForRowAtIndexPath.仅当iOS版本小于8时,我才会喜欢我的自定义heightForRowAtIndexPath方法.有关如何执行此操作的任何建议吗?

tableview tableviewcell ios ios8

12
推荐指数
1
解决办法
1275
查看次数

在UITextField中禁用"定义"

我有一个UITextField只显示数值(0-9,., - ).当用户选择文本字段的内容时,出现具有"复制","粘贴"和"定义"的菜单.由于textfield只显示数值,我不希望出现"define"选项.如何禁用字典"定义"选项UITextField

编辑:我已经解决了这个问题,并在下面发布了解决方案

objective-c ios

10
推荐指数
2
解决办法
2614
查看次数

无法在React-Native的警报中设置警报框标题

我无法使用React-Native设置Alert框的标题

import React, { Component } from 'react';
import ReactNative,{
  StyleSheet,
  Text,
  View,
  Alert,
} from 'react-native';
Run Code Online (Sandbox Code Playgroud)

...

alert("myTitle","my message");
Run Code Online (Sandbox Code Playgroud)

标题显示为"警报"而不是"myTitle"

react-native

9
推荐指数
2
解决办法
4822
查看次数

使用react Native保存文件

我正在使用我的React Native应用程序中的一个选项从Realm数据库中获取数据,将其转换为csv,然后通过电子邮件发送.我打算使用react-native-mail来发送包含附件的电子邮件.

如何在用户的设备上保存文本文件,以便我可以使用react-native-mail(或用于任何其他目的)将其提供给本机电子邮件应用程序?

react-native

6
推荐指数
1
解决办法
1万
查看次数

将NSString中每个句子的首字母大写

如何在NSString中将每个句子的首字母大写?例如,字符串:@"this is sentence 1. this is sentence 2! is this sentence 3? last sentence here."应该变成:@"This is sentence 1. This is sentence 2! Is this sentence 3? Last sentence here."

objective-c nsstring

5
推荐指数
1
解决办法
2233
查看次数

UIDocumentInteractionController停止工作iOS 8

我有一个PDF文件保存在文档目录中.该文件的路径存储在NSString属性"self.URL"中.这是我提供活动项目的代码:

-(void)presentDocumentInteractionController{
    self.docController = [UIDocumentInteractionController interactionControllerWithURL:self.URL];
    self.docController.delegate = self;
    [_docController setUTI:@"com.adobe.pdf"];
    [_docController presentOptionsMenuFromBarButtonItem:self.activityBarButton animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

在iOS 8之前,这段代码运行良好.向用户呈现了诸如打印,复印和电子邮件之类的项目列表以供选择.升级到iOS 8/XCode 6之后,我收到了这个运行时错误(它没有崩溃应用程序):

Unknown activity items supplied: (
    "<UITextViewPrintFormatter: 0x7f908ba53ca0>"
)
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

objective-c ios uidocumentinteraction uiactivityviewcontroller

5
推荐指数
1
解决办法
8787
查看次数

如何在Realm数据更改时更新React Native ListView

我有一个存储在Realm DB中的"Activity"对象列表,它们显示在ListView上.最初加载数据并在屏幕上显示数据没有问题.但是,当数据更新时(在另一个屏幕中,我们称之为'详细编辑屏幕')并且用户返回列表屏幕,列表不会更新.

我尝试在render方法中设置setState,但是返回一个空白屏幕.

    var activities = realm.objects('Activity').sorted('date');
    let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
    ...
    module.exports = React.createClass({
      getInitialState: function(){
        return { 
          dataSource: ds.cloneWithRows(activities),
        };
      },
    ...
    render: function(){
       //update the list of activities
        activities = realm.objects('Activity').sorted('date'); 
        this.setState({dataSource: ds.cloneWithRows(activities)});
         return ( 
          <View>
              {(!activities || activities.length<1) && noActivitiesMessage}
                  <ListView style={styles.listStyle} dataSource={this.state.dataSource} 
            renderRow={this._renderRow} />
    </View>

)
...
}
Run Code Online (Sandbox Code Playgroud)

realm react-native

5
推荐指数
1
解决办法
2636
查看次数

导航器弹出时如何更新组件?

我的应用程序使用Navigator进行路由和屏幕转换.

第一个屏幕有一个项目列表.当用户点击某个项目时,它会打开一个详细信息屏幕,用户可以在其中进行编辑.

当用户完成编辑并返回(导航器的pop()函数)时,列表不会反映用户所做的更改.必须再次加载屏幕以显示更新的列表.

有没有办法强制更新导航器堆栈中的组件?

我尝试了使用Navigator的'onWillFocus'道具的方法,我可以console.log路由,但不知道如何获得路由所代表的屏幕的引用并强制它更新.

这会正确记录我们要转换到的路线:

_onWillFocus(route) {
         console.log('will transition to ' + route.name)
},
Run Code Online (Sandbox Code Playgroud)

...

<Navigator 
          ref={(ref) => this._navigator = ref}
          style={{flex:1}}
          configureScene={() => Navigator.SceneConfigs.FadeAndroid}
          renderScene={this.renderScene}
          onWillFocus={this._onWillFocus}
/>
Run Code Online (Sandbox Code Playgroud)

react-native

3
推荐指数
1
解决办法
4496
查看次数

错误:包含名称为"com.github.xinthink.rnmk"的多个库

使用React-Native为Android构建应用程序失败,并显示此错误

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugResources'.
> Error: more than one library with package name 'com.github.xinthink.rnmk'
Run Code Online (Sandbox Code Playgroud)

这似乎是由反应原生材料试剂盒(RNMK)引起的.但是在Sublime Text中搜索所有项目文件,我找不到任何重复的'com.github.xinthink.rnmk'.作为参考,iOS版本的应用程序运行正常.

编辑

这是我的settings.gradle文件:

rootProject.name = 'myAppName'

include ':app'
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':react-native-material-kit'
project(':react-native-material-kit').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-material-kit/android')
include ':RNMaterialKit'
project(':RNMaterialKit').projectDir = file('../node_modules/react-native-material-kit/android')
Run Code Online (Sandbox Code Playgroud)

这些是build.gradle的依赖:

dependencies {
    compile project(':react-native-vector-icons')
    compile project(':react-native-material-kit')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
    compile …
Run Code Online (Sandbox Code Playgroud)

android gradle react-native

1
推荐指数
1
解决办法
3847
查看次数