我正在尝试创建一个邮政编码输入,使用React-Admin在创建表单中自动加载街道,州和城市值.如何根据邮政编码输入的onBlur事件填充输入? 我实现的最佳结果是以下场景: 我创建了一个有
我实现的最佳结果是以下场景:
我创建了一个有4个输入的自定义组件:邮政编码(在我的国家名为CEP),街道地址,州和城市.然后我在zip输入上添加了一个onBlur事件,并根据状态属性设置输入值.这是代码
class CustomAddressInput extends React.Component { constructor(props){ super(props); this.state = { cep : '', address : '', uf : '', city : '', } this.setAddress = this.setAddress.bind(this); } setAddress(e){ if(e.target.value != undefined){ endereco(e.target.value).then((result)=>{ this.setState({ cep: result.cep, address: result.logradouro, uf: result.uf, city: result.localidade }); }); } } render() { const { classes } = this.props; return ( <TextInput label="CEP" source="cep" onBlur={(e) => this.setAddress(e)} defaultValue={this.state.cep} /> <TextInput label="Endereco" source="address" defaultValue={this.state.address}/> <SelectInput label="Estado" source="state" choices={stateList} defaultValue={this.state.uf}/> <TextInput label="Cidade" source="city" defaultValue={this.state.city}/> ); } } export default withStyles(styles)(CustomAddressInput);
而我正在使用它创建
... <Create {...props}> <SimpleForm> <TextInput label="Nome" source="name"/> <TextInput label="CPF/CNPJ" source="cpfcnpj"/> <TextInput label="Email" source="email"/> <TextInput label="Senha" source="password" type="password" /> <TextInput label="Telefone" source="phone" type="tel"/> <CustomAddressInput/> <BooleanInput label="Pode criar outros usuários do sistema" source="canCreateUser" defaultValue={false}/> <BooleanInput label="Pode gerenciar projetos" source="canCreateProjects" defaultValue={false}/> <BooleanInput label="Pode visualizar honorários" source="canSeeFees" defaultValue={false}/> </SimpleForm> </Create> ...
我知道我正在以错误的方式设置值,因为设置值时,将擦除所有创建表单.我该怎么办?我不熟悉用React开发.
提前致谢
自定义地址输入
export default withStyles(styles)( class CustomAddressInput extends React.Component { render() { return ( <div> <div> <TextInput label="CEP" source="cep" parse={parseCep} format={parseCep} validate={validateCEP}/> </div> <div> <TextInput label="Endereco" source="address"/> <SelectInput label="Estado" source="state" choices={stateList}/> <TextInput label="Cidade" source="city"/> </div> </div> ); } } );
和创建组件
const autoFillAddress = (event)=>{ if(event.cep){ if(event.cep.length === 9){ endereco(event.cep).then((result)=>{ event.address = result.logradouro; event.state = result.uf; event.city = result.localidade; }); } } } ... <Create {...props}> <SimpleForm onChange={autoFillAddress}> <div> <TextInput label="Nome" source="name" validate={validateName}/> <TextInput label="CPF/CNPJ" source="cpfcnpj" parse={parseCpfCnpj} format={parseCpfCnpj} validate={validateCpfCnpj}/> </div> <div className={classes.packTres, classes.fullInput}> <TextInput label="Email" source="email"validate={validateEmail}/> <TextInput label="Senha" source="password" type="password" validate={validatePassword}/> </div> <TextInput label="Telefone" source="phone" type="tel" parse={parsePhone} format={parsePhone} validate={validatePhone}/> <CustomAddressInput /> <BooleanInput label="Pode criar outros usuários do sistema" source="canCreateUser" defaultValue={false}/> <BooleanInput label="Pode gerenciar projetos" source="canCreateProjects" defaultValue={false}/> <BooleanInput label="Pode visualizar honorários" source="canSeeFees" defaultValue={false}/> </SimpleForm> </Create> ...