redux-form을 사용하여 초기 양식 필드 값을 설정하는 데 문제가 있습니다.Redux 양식 - 상태로 업데이트되지 않는 initialValues
저는 redux-form v6.0.0-rc.3을 사용하고 있으며 v15.3.0에 반응합니다.
여기 내 문제가 있습니다. 사용자 격자가 있고 사용자 행을 클릭하면 사용자 편집 페이지로 이동하고 URL에 사용자 ID를 포함합니다. 그런 다음 사용자 편집 페이지에서 id를 잡고 this.state.users를 반환하는 작업 생성자 인 fetchUser (this.props.params.id)를 호출합니다.
이function mapStateToProps(state) {
return { initialValues: state.users.user }
}
내 이해함으로써, 이것은 initialValues이 state.users.user로 설정해야하며,이 상태가 업데이트 될 때마다 initialValues도 업데이트해야합니다 : 그때 호출하여 양식 inital 값을 설정하려고 시도하고있다. 이것은 나를위한 것이 아닙니다. InitialValues는 이전에 클릭 된 사용자 행 (즉, this.state.users.user의 이전 상태)으로 설정됩니다. 그래서 나는 이것을 테스트하고이 구성 요소에 단추를 추가하고 내가 사용자 ID로 다시 fetchUser를 호출하고 클릭하면 하드 코딩하기로 결정
this.props.fetchUser('75e585aa-480b-496a-b852-82a541aa0ca3');
이 올바르게 상태를 업데이트하고 있지만 initialValues에 대한 값 바뀌지 않는다. 상태가 업데이트되면 업데이트되지 않습니다. 나는 똑같은 프로세스를 이전 버전의 redux-form에서 테스트했고 예상대로 작동했다.
여기에 뭔가 잘못되었거나 사용중인 버전의 문제입니다.
사용자 편집 양식 -
class UsersShowForm extends Component {
componentWillMount() {
this.props.fetchUser(this.props.params.id);
}
onSubmit(props){
console.log('submitting');
}
changeUser() {
this.props.fetchUser('75e585aa-480b-496a-b852-82a541aa0ca3');
}
renderTextField(field) {
return (
<TextField
floatingLabelText={field.input.label}
errorText={field.touched && field.error}
fullWidth={true}
{...field.input}
/>)
}
render() {
const { handleSubmit, submitting, pristine } = this.props;
return(
<div>
<form onSubmit={handleSubmit(this.onSubmit.bind(this))} className="mdl-cell mdl-cell--12-col">
<Field name="emailAddress" component={this.renderTextField} label="Email Address"/>
<Field name="firstName" component={this.renderTextField} label="First Name"/>
<Field name="lastName" component={this.renderTextField} label="Last Name"/>
</form>
<RaisedButton onClick={this.changeUser.bind(this)} label="Primary" primary={true} />
</div>
);
}
}
function mapStateToProps(state) {
return { initialValues: state.users.user }
}
UsersShowForm = reduxForm({
form: 'UsersShowForm'
})(UsersShowForm)
UsersShowForm = connect(
mapStateToProps,
actions
)(UsersShowForm)
export default UsersShowForm
사용자 감속기 -
import {
FETCH_USERS,
FETCH_USER
} from '../actions/types';
const INITIAL_STATE = { all: [], user: {} };
export default function(state = { INITIAL_STATE }, action) {
switch (action.type) {
case FETCH_USERS:
return {...state, all: action.payload };
case FETCH_USER:
return {...state, user: action.payload };
default:
return state;
}
}
감속기 색인 -
import { combineReducers } from 'redux';
import { reducer as formReducer } from 'redux-form';
import usersReducer from './users_reducer';
const rootReducer = combineReducers({
form: formReducer,
users: usersReducer
});
export default rootReducer;
의 완벽한 예를 찾을 수 있습니다. NPM에서 빌드 할 때 오류가 있습니까? – Martin
무슨 뜻인지 확실하지 않습니다. 내 감속기를 내 보낸 다음 색인에서 가져 오기 - './users_reducer'에서 usersReducer를 가져옵니다. 오류가 발생하지 않으며 사용자 축소 기가 다른 모든 시나리오에서 예상대로 작동합니다. –
내 말은 '기본 함수 내보내기'를 사용하면 함수 이름을 지정하지 않는 것입니다. 색인 감속기가 사용할 기본 함수 usersReducer()를 보려고합니다. – Martin