我需要創建一個將數據加載到具有初始值的模態中的redux-form。其中一個字段(quoteField)應該在有初始數據時使用readOnly進行呈現。數據中至少還會有一個引號(initialValue),因爲這是一個要求。 但點擊一個新的報價,fields.push({})},添加到形式應該是自由文本(不是隻讀)如何使用redux-form FieldArray文本字段只讀取初始值,但不能在單擊新的field.push時讀取?
我一直在使用readOnly的= {}質樸,只讀= {原始& &初步嘗試...等等...在組件中。這工作,直到我添加另一個領域; fields.push({})}或者如果我點擊另一個表單元素。此操作會使報價字段(使用初始值)再次可編輯。它應該保持readOnly。
我給了嘗試不同的變體:對象,但似乎沒有給我需要的功能。除了這個問題
// removed imports
class EditReduxForm extends React.Component {
constructor(props) {
super(props);
// removed handlers and state
}
// removed function for submitting
render() {
const { valueForPRI } = this.state;
const {fields:{addingName, quoteField}, array: { push }, handleSubmit, addCustom, onNewRequest, form, input, valid, reset, pristine, submitting } = this.props;
return (
<span>
<form onSubmit={handleSubmit(this.handleFormSubmit.bind(this))}>
<Field name="addingName" component={formElement.renderName} value={valueForPRI} >{this.menuItemsPRI(valueForPRI)}</Field>
<FieldArray name="quoteField" component={formElement.renderEditQuote} /> // ***** <= this element ******
{actions} <span className="require"> <span className="ast">*</span> required field</span>
<br/>
</form>
</span>
);
}
}//end edit class
EditReduxForm = reduxForm({
form: 'editForm',
fields: ['addingName', 'quoteField[]'],
enableReinitialize: true,
validate,
})(EditReduxForm);
EditReduxForm = connect(
state => ({
initialValues: {
addingName: state.loadFormValues.addingName,
quoteField : state.loadFormValues.quoteField,
}
})
)(EditReduxForm)
export default EditReduxForm;
和表單字段從另一個文件中拉 一切工作正常。
// removed imports
export const renderName = ({ field, input, label, type, meta: { touched, error, pristine}, children, ...custom }) => (
<ul>
<li>
<Field
{...input}
component ={SelectField}
onChange ={(event, index, value) => input.onChange(value)}
children ={children}
className ="priorityAutoCompleter"
id ="addingPriority"
errorText ={touched && error }
{...custom}
/>
</li>
</ul>
)
const renderEditQuote = ({ fields, field, input, value, label, type, meta: { pure, touched, error, pristine, dirty, initial}, children, ...custom, }) => (
<ul>
<li>
<label htmlFor="quoteField">Quote(s)</label>
<IconButton
tooltipPosition ="top-right"
onTouchTap ={() => fields.push({})}
</IconButton>
</li>
{fields.map((quote, index) =>
<ul className="quoteList" key={index}>
<IconButton
type ="button"
tooltip ="remove"
tooltipPosition ="top-left"
className ="floatRight marginRight"
onTouchTap ={() => fields.remove(index)}
</IconButton>
<li className="quoteListLi">
<Field
{...input}
component ={TextField}
id ="addingQuote"
name ={`${quote}.addingQuote`}
type ="text"
multiLine
errorText ={touched && error }
children ={children}
{...custom}
readOnly ={ ????? } // // ***<= this element ***
/>
<span className="error">{error }</span>
</li>
<li>
<Field
{...input}
component ={TextField}
name ={`${quote}.addingLabel`}
id ="addingLabel"
type ="text"
onKeyDown ={(event) => {if (keycode(event) === 'enter') { event.preventDefault() }} }
errorText ={touched && error}
readOnly ={ ????? } // // ** <= this element **
/>
<span className="error">{error }</span>
<Field
{...input}
component ={TextField}
name ={`${quote}.addingSource`}
id ="addingSource"
type ="text"
onKeyDown ={(event) => {if (keycode(event) === 'enter') {event.preventDefault() }} }
errorText ={touched && error }
readOnly ={ ????? } // *** <= this element **
/>
<span className="error">{error }</span>
</li>
</ul>
)}
</ul>
)
可以免去很多這裏的不必要的代碼,我們與像下面的東西來完成呢? CSS等 –
我刪除了一些縮短文章的代碼 – dawg8it