2017-06-20 12 views
0

Ich versuche, eine Komponente mit bereits vorhandenen Daten aus Zustand (von redux-persist zur Verfügung gestellt), die Daten in ist state.login.user (ich kann es in console.log in der MapStateToProps sehen Funktion, die die dataObject- genannt und gibt wird: state.login.user aber die dataObject- aktualisiert und wegen dieser componentWillReceiveProps nicht zu werden heißt nicht werdenreagieren native componetWillUpdate funktioniert nicht

können Sie mir zeigen, was im falsch zu machen

import React from 'react' 
import { connect } from 'react-redux' 
import { ScrollView, AppRegistry, Component, Text, Image, View, Button, Modal, TouchableOpacity } from 'react-native' 
import { GiftedForm, GiftedFormManager } from 'react-native-gifted-form' 

// Styles 
import styles from './Styles/MyProfileScreenStyles' 

class MyProfileScreen extends React.Component { 
    constructor (props, context) { 
    const dataObject = { 
     profile: { 
     last_name : undefined, 
     } 
    } 
    super(props, context) 
    this.state = { 
     form: { 
     lastName: dataObject.profile.last_name, 
     tos: false 
     } 
    } 
    } 

    handleValueChange (values) { 
    this.setState({form: values}) 
    } 
    componentWillReceiveProps (newProps) { 
    console.tron.log("componend will receive") 
    console.tron.log(newProps) 
    if (newProps.dataObject) { 
     this.setState({ 
     dataObject: newProps.dataObject 
     }) 
    } 
    } 
    render() { 
    const {lastName, tos, gender} = this.state.form 
    console.log('render', this.state.form) 
    return (
     <View style={styles.container}> 
     <GiftedForm 
      formName='signupForm' 
      openModal={(route) => { this.props.navigator.push(route) }} 
      onValueChange={this.handleValueChange.bind(this)} 
     > 
      <GiftedForm.TextInputWidget 
      name='lastName' 
      title='Last name' 
      placeholder='Last name' 
      clearButtonMode='while-editing' 
      value={lastName} 
      /> 
      <GiftedForm.HiddenWidget name='tos' value={tos}/> 
     </GiftedForm> 
     </View> 
    ) 
    } 
} 
const mapStateToProps = (state) => { 
    if(state.login.user !== null){ 
    console.tron.log("test map state to props") 
    return { 
     dataObject: state.login.user 
    } 
    } 
    return {} 
} 

export default connect(mapStateToProps)(MyProfileScreen) 
.?

Antwort

2

componentWillReceiveProps wird nur aufgerufen, wenn die Requisiten aktualisiert werden, nachdem die Komponente vor der Komponente gerendert wurde Es wird erneut gerendert. Sie sollten den Status in Ihrem Konstruktor festlegen, da die Requisiten bereits vorhanden sein sollten.

+0

Wie setzen Sie die Requisiten auf den state.login.user? – AleXzpm

+0

In Ihrem Konstruktor definieren Sie ein 'dataObject', wenn Sie einfach' props.dataObject' verwenden. – Jwebbed

+0

In diesem.state put 'dataObject: props.dataObject' –

Verwandte Themen