【问题标题】:Update a value in React Native Realm Database更新 React Native Realm 数据库中的值
【发布时间】:2017-11-29 06:38:11
【问题描述】:

我的 React Native 项目中有一个领域数据库。我想在另一个页面中更新语言的值。我最初能够写入该值,但我是否被卡住了更新它。下面是我的代码。

配置文件架构(领域数据库架构)

'使用严格';

import Realm from 'realm';

class Profile extends Realm.Object {}
Profile.schema = {
    name: 'Profile',
    properties: {
        Onetime: 'string',
        Name: 'string',
        Email: 'string',
        Phone: 'string',
        Language:'string',
        Url:'string',
    },
};



export default new Realm({schema: [Profile]});

加载初始数据

let objects = realm.objects('Profile');

    var name,url,phone,onetime;


    if (firebase.auth().currentUser.displayName == null ) {
      onetime= 'true';
      name= 'Name';
      url = 'https://media2.giphy.com/media/sbLpwwHlgls8E/giphy.gif';
      phone = '0000000000';
    }
    else {
      onetime= 'true';
      name=firebase.auth().currentUser.displayName;
      url=firebase.auth().currentUser.photoURL;
      phone = '0000000000';
    }

    if (objects.length == 0) {

    realm.write(() => {
    realm.create('Profile', { Onetime: onetime, Name: name, Email: firebase.auth().currentUser.email, Phone:phone, Language: 'e', Url: url, });
    });
    }

    else {
        realm.write(() => {
        realm.delete(objects);
        realm.create('Profile', { Onetime: onetime, Name: name, Email: firebase.auth().currentUser.email, Phone:phone, Language: 'e', Url: url, });
    });


    }

我必须更新值的活动

import React from 'react';
import {
  ScrollView,
  View,
  StyleSheet
} from 'react-native';
import {
  RkText,
  RkTextInput,
  RkAvoidKeyboard,
  RkTheme,
  RkStyleSheet
} from 'react-native-ui-kitten';
import {SocialSetting} from '../../components';
import {FontAwesome} from '../../assets/icons';
import {GradientButton} from '../../components';
import Avatar from 'react-native-interactive-avatar';
import ImagePicker from 'react-native-image-crop-picker';
import realm from '../../realm';
import firebase from 'firebase';
import {RkSwitch} from '../../components/switch/index';
import RadioForm, {RadioButton, RadioButtonInput, RadioButtonLabel} from 'react-native-simple-radio-button';

var radio_props = [
  {label: 'English       ', value: 'e' },
  {label: 'Malayalam', value: 'm'}

];

var lange = '';

var objects = realm.objects('Profile');

export class ProfileSettings extends React.Component {
  static navigationOptions = {
    title: 'Profile Settings'.toUpperCase()
  };

  constructor(props) {
    super(props);




    this.state = {
      name: objects[0].Name,
      email: objects[0].Email,
      phone: objects[0].Phone,
      language:objects[0].Language,
      url:objects[0].Url,
      lang:''

    }

  }




    pickimage(){

      ImagePicker.openPicker({
        width: 300,
        height: 400,
        cropping: true
      }).then(image => {
        console.log("imagelink- "+image);
      });
    }

    handleLogOut() {
        firebase.auth().signOut();
    }

    handleSave() {

          alert("Language is: "+lange);


    }

    updateuser(){

      var user = firebase.auth().currentUser;

     user.updateProfile({
     displayName: this.state.name,
     email: this.state.email
}).then(function() {
    alert("Update SuccessFull");
}).catch(function(error) {
  // An error happened.
  alert("Update Failed");
});


  }



  render() {

    if (this.state.language == 'e') {

      var val = 0;

      }

      else {
        var val = 1;
      }




    return (
      <ScrollView style={styles.root}>
        <RkAvoidKeyboard>
          <View style={styles.header}>
          <Avatar
               uri={this.state.url}
               size={'default'}
           />
          </View>
          <View style={styles.section}>
            <View style={[styles.row, styles.heading]}>
              <RkText rkType='header6 primary'>INFO</RkText>
            </View>
            <View style={styles.row}>
              <RkTextInput label='Name'
                           value={this.state.name}
                           rkType='right clear'
                           onChangeText={(text) => this.setState({name: text})}/>
            </View>

            <View style={styles.row}>
              <RkTextInput label='Email'
                           value={this.state.email}
                           onChangeText={(text) => this.setState({email: text})}
                           rkType='right clear'/>
            </View>



          </View>



          <View style={styles.section}>
            <View style={[styles.row, styles.heading]}>
              <RkText rkType='primary header6'>CHOOSE YOUR LANGUAGE</RkText>
            </View>

            <View>
            <View style={styles.radio}>
          <RadioForm
            radio_props={radio_props}
            initial={val}
            onPress={(value) => {
              {
              this.setState({lang:value})
              this.setState({language: this.state.lang})
              lange = value;


            }}}
          />

          </View>
        </View>
          </View>
          <GradientButton rkType='large' style={styles.button} text='SAVE' onPress={this.handleSave} />
          <GradientButton rkType='large' style={styles.button} text='LOGOUT' onPress={this.handleLogOut}/>
        </RkAvoidKeyboard>
      </ScrollView>
    )
  }
}

let styles = RkStyleSheet.create(theme => ({
  root: {
    backgroundColor: theme.colors.screen.base
  },
  header: {
    backgroundColor: theme.colors.screen.neutral,
    paddingVertical: 25,
    justifyContent: 'center',
    alignItems: 'center'
  },
  section: {
    marginVertical: 25
  },
  radio: {
    flexDirection:'row',
    margin:20
  },
  heading: {
    paddingBottom: 12.5
  },
  row: {
    flexDirection: 'row',
    paddingHorizontal: 17.5,
    marginTop:15,
    borderBottomWidth: StyleSheet.hairlineWidth,
    borderColor: theme.colors.border.base,
    alignItems: 'center',
    justifyContent: 'space-between',
    flex:1
  },
  button: {
    marginHorizontal: 16,
    marginBottom: 32
  }
}));

我想更新 handleSave()

中语言的值

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: react-native realm


    【解决方案1】:

    解决了这个问题。这是解决方案

    handleSave() {
    
              //alert("Language is: "+lange);
              let updt = realm.objects('Profile');
              realm.write(() => {
                updt[0].Language = lange;
    });
    
          alert("Language is: "+updt[0].Language);
    
    
        }
    

    只需创建架构对象并更新特定字段的值。

    【讨论】:

    • @user5800586 太棒了
    猜你喜欢
    • 2021-05-13
    • 2018-11-16
    • 1970-01-01
    • 2023-03-18
    • 2016-09-16
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多