【发布时间】:2020-05-06 20:26:21
【问题描述】:
我有一个输入“A”,它从 API 获取地址数据并根据该数据自动填充输入“B”“C”和“D”,但在输入完成后,我尝试发送该表单到我的后端,没有发送这些自动填充的输入,只发送输入“A”。此外,如果我手动编辑任何输入(删除字符、添加空格、更改值),我编辑的输入会发送到我的后端。
我正在使用减速器来存储状态。我使用的输入都是普通的 react-admin TextInput 组件。
代码如下:
const AutoFill = () => {
const [searching, setSearching] = useState(false);
const [error, setError] = useState(false);
const [stateData, setStateData] = useReducer(
(state, newState) => ({ ...state, ...newState }),
{
cep: ' - ',
address: '',
number: '',
neighborhood: '',
city: '',
state: '',
}
);
const FormControl = (event) => {
const { name, value } = event.target;
setStateData({ [name]: value });
};
const SearchControl = (event) => {
const { name, value } = event.target;
setStateData({ [name]: value });
if (value && !value.includes('_')) {
setSearching(true);
setStateData({ state: '...' });
setStateData({ city: '...' });
setStateData({ neighborhood: '...' });
setStateData({ address: '...' });
cep(value.replace('-', '')).then(
(result) => {
setSearching(false);
setError(false);
setStateData({ state: result.state });
setStateData({ city: result.city });
setStateData({ neighborhood: result.neighborhood });
setStateData({ address: result.street });
},
() => {
setSearching(false);
setError(true);
setStateData({ state: '' });
setStateData({ city: '' });
setStateData({ neighborhood: '' });
setStateData({ address: '' });
}
);
}
};
return (
<>
<TextInput
source="cep"
error={error}
value={stateData.cep}
onChange={SearchControl}
/>
<TextInput
source="address"
disabled={searching}
value={stateData.address}
onChange={FormControl}
/>
<TextInput
source="number"
disabled={searching}
value={stateData.number}
onChange={FormControl}
/>
<TextInput
source="neighborhood"
disabled={searching}
value={stateData.neighborhood}
onChange={FormControl}
/>
<TextInput
source="state"
disabled={searching}
value={stateData.state}
onChange={FormControl}
/>
<TextInput
source="city"
disabled={searching}
value={stateData.city}
onChange={FormControl}
/>
</>
);
};
export const Create = (props) => {
return (
<Create {...props}>
<SimpleForm>
<NumberInput label="Value" source="price" />
<AutoFill />
<RichTextInput label="Description" source="description" />
</SimpleForm>
</Create>
);
};
【问题讨论】:
-
你能在这里分享代码吗?
-
@AnasKhurshid 是的,当然,我刚刚编辑了问题,抱歉耽搁了!
-
Mr.Henriko 请检查我的回答。
-
@podolski721 问题不在于状态本身,而在于 react-admin,我知道我的状态是用 API 返回的值更新的,但是状态和 react-admin 之间的通信所以我可以将数据发送到后端很奇怪。
-
我添加了我的更改。请检查一下。
标签: reactjs react-admin