首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Redux-Form将数据从onChange保存到属性

React-Redux-Form将数据从onChange保存到属性
EN

Stack Overflow用户
提问于 2017-03-16 00:55:34
回答 1查看 1.7K关注 0票数 0

我是一个新的react-redux,我正在尝试通过使用可以传递给另一个组件的onChange事件将从react-redux-form文本框中输入的值保存为props

我的文本框代码片段是

代码语言:javascript
复制
 <ListItemContent>
      <Control component={Textfield} model="somemodel" label="MyLabel"
        onChange={this.props}/>
 </ListItemContent>

如何保存此值并使其可用于其他组件?

编辑我让它部分工作:

代码语言:javascript
复制
     <ListItemContent>
          <Control component={Textfield} model="somemodel" label="MyLabel"
            onBlur={this.onChangeOfValue}/>
     </ListItemContent>

      onChangeOfValue = (event) =>
      {
           this.setState({ newValueToPassAlong:   event.target.value}); //newValueToPassAlong is set in constructor
     };



  .....

   let mapStateToProps = (state) => {
   return {newValueToGive: state.newValueToPassAlong} //This is undefined
  };

  export default connect(mapStateToProps)(form)

此外,当另一个组件的状态改变时,我的componentWillReceiveProps(nextProps)不会被触发。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 02:08:22

代码语言:javascript
复制
// YOUR TEXTFIELD COMPONENT
import React, { Component } form 'react';
import { reduxForm, Field } from 'redux-form';
import {passValueToOtherComponent} from '../actions/your-actions-index-file';
import { connect } from 'react-redux';
import ListItemContent form 'list-item-content';

class TextField extends Component {
  constructor(props) {
    super(props);

    this.state = {
      textFieldValue: '',
    }
    this.onInputChange = this.onInputChange.bind(this);
  }

  onInputChange(event) {
    var newValue = event.target.value;
    this.setState({textFieldValue: newValue});
    //when input changes
    //call action to update global state...
    this.props.passValueToOtherComponent(this.state.textFieldValue)
  }

  render() {
    <form>
    <ListItemContent>
         <Control component={Textfield} model="somemodel" label="MyLabel"
           onChange={this.onInputChange} value={this.state.textFieldValue}/>
    </ListItemContent>
    </form>
  }
}

//ReduxForm wrapper
const wrappedReduxForm = connect(null, {passValueToOtherComponent})(TextField)

export default reduxForm({
  form: 'TextField'
})(TextField)


// actions/your-actions-index-file.js
//create an action which will call to update global state
export const NEW_VALUE = "NEW_VALUE"

export function passValueToOtherComponent(value) {
    return {
    type: CREATE_POST,
    payload: value,
  }
}


//YOUR NewValue Reducer
//reducer_new_value.js
//create reducer which will accept payload data
import {NEW_VALUE} from '../actions/your-actions-index-file';

const INITIAL_STATE = {
  valueToPass: null
};

export default function (state = [], action) {
  console.log('Action...' action);

  switch (action.type) {
    case NEW_VALUE:
      return { ...state, valueToPass: action.payload.data}
      break;
    default:

  }
}

//Your Root Reducer
//Because you may have lots of state to manage, a rootReducer is awesome in managing it all
import { combineReducers } from 'redux';
import NewValueReducer from './reducer_new_value';

const rootReducer = combineReducers({
  // state: (state = {}) => state
  value: NewValueReducer,
});

export default rootReducer;



//finally pass this desired value to your desired Component
import React, {Component} from 'react';
import { connect } from 'react-redux';

class OtherComponent extends Component {

  render() {
    return (
      <div>
        <input value= {this.props.texFieldValue}>
      </div>
    )
  }
}


function mapStateToProps(state) {
  return { textFieldValue: state.value.valueToPass }
}

export default connect(mapStateToProps)(OtherComponent);

这是我刚打出来的东西。不确定它是否可以工作,但它涵盖了操作、缩减和从一个组件到另一个组件的更新值。当然,这是一种使用react redux的疯狂方式。我不确定在每次输入更改时调用此操作的效率。将状态的当前值作为道具传递给所需组件可能会更好。

如果您有更多的问题,我很乐意为您提供帮助或为您提供一些其他资源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42816108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档