最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Bind text input value on change event - React Native + Redux - Stack Overflow

programmeradmin1浏览0评论

I'm creating form in React Native and Redux. I added TextInput and want to change the state of this field in Reducer. I have a trouble, because I don't know how to add (change) => this.setState({change}) function to my Redux architecture. I use bine reducers and have no idea how to bind that value. Saying in short, I need to gain default behaviour of the TextInput on change function but I have to use Redux to do it.

Form.js

const mapDispatchToProps = dispatch => {
  return {
      changeNameInput: () => dispatch({type: 'CHANGE_NAME_INPUT'})
  };
};

const mapStateToProps = state => {
  return {
      change: state.changeNameInput.change
  };
};

class Form extends React.Component {
  render() {
    return (
      <View>
         <FormLabel>Name</FormLabel>
         <TextInput
            onChangeText={this.props.changeNameInput}
            value={this.props.change}
        />
      </View>
    );
  }
}

Reducer.js

const initialState = {
    change: 'Your name'
   };

   const changeinputReducer = (state = initialState, action) => {
     switch (action.type) { 
       case 'CHANGE_NAME_INPUT':

  //Problem

         return {...state, change: '????' };
        default:
         return state;
     }
   };

   export default changeinputReducer;

I'm creating form in React Native and Redux. I added TextInput and want to change the state of this field in Reducer. I have a trouble, because I don't know how to add (change) => this.setState({change}) function to my Redux architecture. I use bine reducers and have no idea how to bind that value. Saying in short, I need to gain default behaviour of the TextInput on change function but I have to use Redux to do it.

Form.js

const mapDispatchToProps = dispatch => {
  return {
      changeNameInput: () => dispatch({type: 'CHANGE_NAME_INPUT'})
  };
};

const mapStateToProps = state => {
  return {
      change: state.changeNameInput.change
  };
};

class Form extends React.Component {
  render() {
    return (
      <View>
         <FormLabel>Name</FormLabel>
         <TextInput
            onChangeText={this.props.changeNameInput}
            value={this.props.change}
        />
      </View>
    );
  }
}

Reducer.js

const initialState = {
    change: 'Your name'
   };

   const changeinputReducer = (state = initialState, action) => {
     switch (action.type) { 
       case 'CHANGE_NAME_INPUT':

  //Problem

         return {...state, change: '????' };
        default:
         return state;
     }
   };

   export default changeinputReducer;
Share Improve this question asked Feb 9, 2018 at 14:10 ItalikItalik 6963 gold badges20 silver badges37 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 7

For passing value from TextInput to reducer, you need to change in dispatch function:

const mapDispatchToProps = dispatch => {
  return {
      changeNameInput: (text) => dispatch({type: 'CHANGE_NAME_INPUT', text})
  };
};

and in your reducer change it to

const changeinputReducer = (state = initialState, action) => {
     switch (action.type) { 
       case 'CHANGE_NAME_INPUT':

  //Solution

         return {...state, change: action.text };
        default:
         return state;
     }
   };

Hope it worked..

发布评论

评论列表(0)

  1. 暂无评论