2017-07-18 43 views
1

我使用终极版的形式和试图建立一个Field组件,像这样:Redux-Form,如何使用带有动态字段名称的formValueSelector?

<Rating 
    stop={10} 
    initialRate={selector(this.props.state, 'age')} 
    onRate={(rate) => this.onRateChange(rate)} 
    onChange={(value) => { this.changeRate("name", value) } } 
/> 
<span className="label label-default" id="label-onrate">{this.state.label}</span> 

<Field 
    name="age" 
    type="number" 
    component={renderField2} 
/> 

RateForm = reduxForm({ 
    form: 'rateForm' 
})(RateForm); 

const selector = formValueSelector('rateForm'); 

const mapStateToProps = state => { 
    return { 
    }; 
}; 

export default connect(mapStateToProps)(RateForm); 

我遇到的问题是initialRate是不工作...下面没有返回值:

selector(this.props.state, 'age') 

因为字段名称将是动态的,我需要避免:

定义在mapStateToProps特定的字段名。

我在做什么与Redux-formValueSelector错误不提供initialRate值?

+1

你使用哪个版本的redux表格 –

+0

6.6.3是我的版本的redux表格。这是问题吗? – AnApprentice

+0

你确定你将'state'作为道具传递给你的RateForm组件吗? –

回答

1

你可以做这样的事情:

import { getFormValues } from 'redux-form/immutable' 

getFormValues将返回与提供的form name保存的值。

const mapStateToProps = state => { 
    const formState = getFormValues('rateForm')(state) 
    console.log('formState...', formState) 
    return formState 
} 

这对我来说工作得很好。我收到了这个表格中所有Field组件的值,例如rateForm。 欲了解更多详情,你可以去here

1

从文档:

函数从formValueSelector()返回具有以下 结构:

选择器(状态:对象,...字段:字符串)

state : Object [required] 

全球Redux状态给予mapStateToProps

...field : String [required] 

要选择的字段或字段。如果您只提供一个 字段名称,则该函数将返回该字段的值。如果 提供多个字段名称,它将返回一个将 字段映射到值的对象。如果你的领域是“深”(即有一个或多个在 的名字),你回来的结构也会很深。例如如果您 领域是'a.b''a.c',所产生的结构将{ a: { b:'bValue', c: 'cValue' } }.

在你的情况,你没有返回从mapStateToProps什么,

你的可能,而不必在评级组件选择,有它在mapStateToProps和使用它像

<Rating 
    stop={10} 
    initialRate={selector(this.props.state, 'age')} 
    onRate={(rate) => this.onRateChange(rate)} 
    onChange={(value) => { this.changeRate("name", value) } } 
/> 


const selector = formValueSelector('rateForm'); 

const mapStateToProps = state => { 
    return { 
     state 
    }; 
}; 

上面的例子是假设props可向Rating组件。

+0

正确,但我有一个动态字段名称作为提及领导这就是为什么我不能这样做。这是如何工作的动态字段名称? – AnApprentice

+0

你的意思是你可以有多个这样的评级组件字段,在上述情况下,你希望initialRating等于年龄值,在这种情况下检查更新 –

+0

我将有多个。我只是不想列出所有5个以上的领域。 – AnApprentice

相关问题