- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 React-Native、Redux、React-Navigation 和 Expo 创建一个简单的事件跟踪器应用程序,但我在处理一个相当琐碎的部分时遇到了一些麻烦。
我有一个表单屏幕,您可以在其中输入事件名称、日期和其他信息。我正在使用 <TextInput/>
输入事件的名称,但不会发送到 onChange
事件,只有 onChangeText
.另外,当我使用 onChange
时事件后,导航上的后退 按钮变得无响应,无论我点击哪里,光标都只停留在 TextInput 中
我有另一个与内存相关的问题,它导致模拟器在每次连续构建后加载的时间越来越长,并在加载几次后变得无响应。我的移动 expo 应用程序偶尔也会崩溃。我有一种模糊的感觉,认为这两个问题是相关的,但我完全不知道问题是什么。基本上,每次保存文件时,Exponent 模拟器的内存使用量都会翻倍。
这是CreateEventScreen.js
目前看来,我将在解决 onChange 问题后立即将其转换为 Redux。
export default class CreateEvent extends Component {
constructor(){
super();
this.state = {
name: '',
date: new Date(),
repeatAnnually: false,
showDatePicker: false,
wallPaperSource: null
};
this.toggleSelectWallPaper = this._toggleSelectWallPaper.bind(this);
this.handleChange=this._handleChange.bind(this);
}
static navigationOptions = {
title: 'Create New Event'
}
_handleToggleSwitch = () => this.setState(state => ({
repeatAnnually: !this.state.repeatAnnually
}));
/* THIS IS NOT WORKING */
_handleChange = (event) => {
console.log(event);
const target = event.target;
const value = target.value;
const name = target.name;
this.setState({
[name]: value
})
}
_onDateChange = (date) => this.setState(state => ({
date: date
}));
_toggleSelectWallPaper = async() => {
let result;
try {
result = await ImagePicker.launchImageLibraryAsync({
allowEditing: true,
aspect: [4, 3]
});
} catch (e) {
result = null;
}
if(!result.cancelled){
this.setState({
wallPaperSource: result.uri
});
}
}
_renderDatePicker(){
if(this.props.showDatePicker){
return (
<DatePickerIOS
date={this.state.date}
mode="date"
onDateChange={this._onDateChange}
/>
)
} else {
return null;
}
}
render(){
const { onClick, toggleDatePicker, showDatePicker } = this.props
let { wallPaperSource } = this.state;
return(
<View>
<TextInput
style={styles.input}
name="name"
placeholder="Event Name"
value={this.state.name}
/* THIS IS NOT WORKING */
onChange={this._handleChange}
/* This works but not ideal for redux integration */
// onChange={(event) => this.setState({'name': event.target.value})}
/>
<View style={styles.eventDetailsContainer}>
<View style={styles.itemContainer}>
<Text>Repeat Annually</Text>
<Switch
onValueChange={this._handleToggleSwitch}
value={this.state.repeatAnnually}
/>
</View>
<TouchableOpacity onPress={e => {
e.preventDefault()
toggleDatePicker(showDatePicker)
}}>
<View style={styles.itemContainer}>
<Text>Select Date</Text>
<Text>{this.state.date.toLocaleDateString()}</Text>
</View>
</TouchableOpacity>
<View>
{this._renderDatePicker()}
</View>
</View>
<View style={styles.eventDetailsContainer}>
<TouchableOpacity onPress={this.toggleSelectWallPaper}>
<View style={styles.itemContainer}>
<Text>Wallpaper</Text>
{ this.state.wallPaperSource ?
<Image source={{ uri: wallPaperSource }} style={{ width: 100, height: 100 }}/>
: null
}
</View>
</TouchableOpacity>
</View>
<Button
style={styles.submitBtn}
onPress={e => {
e.preventDefault()
if(!this.state.name.trim()){
return
}
onClick(this.state)
}}
color="#1e90ff"
title="Create Event"
/>
</View>
)
}
}
package.json -
{
"name": "floss-evens",
"version": "0.0.0",
"description": "Hello Expo!",
"author": null,
"private": true,
"main": "node_modules/expo/AppEntry.js",
"dependencies": {
"expo": "^18.0.4",
"lodash": "^4.17.4",
"moment": "^2.18.1",
"prop-types": "^15.5.10",
"react": "16.0.0-alpha.12",
"react-native": "https://github.com/expo/react-native/archive/sdk-18.0.1.tar.gz",
"react-native-image-picker": "^0.26.3",
"react-navigation": "^1.0.0-beta.11",
"react-redux": "^5.0.5",
"redux": "^3.7.2"
}
}
如有任何帮助或反馈,我们将不胜感激。谢谢!
最佳答案
提供给 onChange
的事件对象很大,如果记录,将停止其他 js 执行。只需删除 console.log(event);
。
使用onChange
时,可以使用event.nativeEvent.text
检索输入值。但是,这不是您应该捕获输入值的方式。正确的方法是使用 onChangeText
。
TextInput
没有名为 name 的属性,该属性将被忽略。
// This will not be defined
const name = target.name;
您可以向 _handleChange
提供额外的参数来完成预期的操作:
onChangeText={(value) => this._handleChange(value, 'keyName')}
如果你想自动处理这个,例如有关大量输入,请参阅 this question .
关于javascript - TextInput 的 React-Native Expo 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604222/
我正在尝试设置 React 和 Expo monorepo 项目,一切似乎都很好,直到我想安装 react-navigation与 expo install根据 react-navigation 文档
我正在使用 expo-cli@3.0.10 此应用程序在安装在设备中的客户端博览会中运行良好 最佳答案 好的,我相信我找到了核心问题 - DNS 问题 . 无论您使用的是 Mac OS、Windows
如何在开发过程中获取重定向到 expo 应用程序的链接? 我有一个 React Native Expo 应用程序。在开发过程中以 èxpo start 开始。现在我喜欢使用 OAuth 2.0 身份验
为什么EXPO有两种通过Google进行身份验证的方式? 我不清楚expo-google-app-auth和expo-google-sign-in之间有什么区别。 在什么场合我应该使用哪一个? 最佳答
我正在使用 React Native 进行编码。当我第一次创建用于检查运行的 react native 应用程序时,我没有看到这一点。当我实现我的代码时看到这一点。我的目的是生成apk。 app.js
我已经在全局范围内安装了 expo-cli,但是当我尝试运行任何 expo 代码时,例如 expo start从任何地方,我得到:zsh: command not found: expoecho $P
我是react-native新手,我安装了expo,如下官方页面中提到的。 npm install expo-cli --global expo init my-new-project cd my-n
根据 Expo documentation with SQLite 我会这样查询: tx.executeSql(sqlStatement, arguments, success, error) 我是这
很多次我在启动 expo 项目后收到以下信息消息,似乎无法升级 expo-cli: 有一个新版本的 expo-cli 可用 (4.2.1)。您目前正在使用 expo-cli 3.28.0 使用您选择的
我已经使用 Expo 构建了一个应用程序,现在由于某些原因我想使用 expo eject 从 expo cli 中弹出该应用程序。我还能使用 Expo 套餐吗? 最佳答案 是的,Expo 包应该可以。
部署我的 Expo 网络项目时,我需要将一个文件添加到网络根目录(一个 Apple App 站点关联文件)。 Expo 开箱即用地支持此功能吗? 最佳答案 您所要做的就是在项目的根目录中创建一个名为“
我需要有关 expo xde 的帮助。 创建项目后,当我扫描二维码时,出现以下错误: there was a problem loading the experience. It looks like
我使用create-react-native-app创建了react-native项目。在此,我从 expo 导入权限模块, import {Permissions} from "expo"; 后来我
例如,如果我有组件: import React, { Component } from 'react'; import { Video } from 'expo'; let styles = requ
我将使用 Expo 制作一个应用程序,并与客户分享初步结果。我想告诉他们,这个世博应用程序反射(reflect)了最终的应用程序,它将作为独立的应用程序供我客户的客户一对一使用。 该应用程序的功能将是
When I run a Snack in the Expo Go app, is it doing anything more sophisticated than downloading t
我刚刚从 React 导航 5 升级到 6 并查看了 the doc for transparent modals .不幸的是,我无法让之前的屏幕显示在模态下。相反,我得到一个灰色背景。 我用我的代码
我尝试通过 expo 构建应用程序但失败了,我尝试重新安装 expo-cli。所以,我输入了下面的代码来删除 expo-cli。 npm -g uninstall expo-cli --save 和
我正在尝试运行我的 react-native 应用程序,我在 android 模拟器和我的手机 HUAWEI Y3II 上运行它,同样的事情发生了。 几天前我工作得很好,但突然这个错误不断出现:Cou
在 Expo 网络项目中是否有推荐的代码拆分方法? 我在文档中找不到任何内容,即使在网页性能页面上:https://docs.expo.io/guides/web-performance/ 我很惊讶,
我是一名优秀的程序员,十分优秀!