应用程序启动后使用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 0.26后,应用程序崩溃并出现以下错误:
"超级表达式必须为null或函数,而不是未定义"
它在Switch.js文件中崩溃,该文件属于React-Native-Material-Kit软件包.
我已经使用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方法.有关如何执行此操作的任何建议吗?
我有一个UITextField只显示数值(0-9,., - ).当用户选择文本字段的内容时,出现具有"复制","粘贴"和"定义"的菜单.由于textfield只显示数值,我不希望出现"define"选项.如何禁用字典"定义"选项UITextField?
编辑:我已经解决了这个问题,并在下面发布了解决方案
我无法使用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应用程序中的一个选项从Realm数据库中获取数据,将其转换为csv,然后通过电子邮件发送.我打算使用react-native-mail来发送包含附件的电子邮件.
如何在用户的设备上保存文本文件,以便我可以使用react-native-mail(或用于任何其他目的)将其提供给本机电子邮件应用程序?
如何在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."
我有一个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
我有一个存储在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) 我的应用程序使用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为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) react-native ×7
ios ×3
objective-c ×3
android ×1
asyncstorage ×1
gradle ×1
ios8 ×1
nsstring ×1
realm ×1
redux ×1
tableview ×1