reactjs - 从一个函数中获取值并将其传递给另一个函数
问题描述
我有一个名为 onDatabaseSelect 的函数,它检索数据库的值,如控制台中所示,具有给定的键属性名称和 Object_name 的值:“”。
const onDatabaseSelect = (e, value) => setDatabase(value)
useEffect(() => {
console.log("set database", database)
}, [database])
它在这里被调用:
<div style={{marginRight: '210px', width: '100%'}}>
<AutoCompleteSingle
name='Database'
label='Database'
options={autoComplete.databasesAutoComplete}
onChange={autoComplete.onDatabaseAutoCompleteFieldUpdate}
onSelect={onDatabaseSelect}
uniqueIdentifier={1}
/>
</div>
我需要将 object_name 的值推送到新状态的返回值
const [productionDatabaseData, setProductionDatabaseData] = useState([])
const addToProduction = ({ target }, { id, databases }) => {
setProductionDatabaseData((previousState) => {
let newState = [...previousState]
if (target.checked) {
newState = [
...newState,
{ unit_test_id: id, databases }
]
} else {
const i = newState.findIndex(({ unit_test_id }) => unit_test_id === id)
if (i !== -1) newState.splice(i, 1)
}
return newState
})
}
预期输出:
因此,如果选中,则应该将 object_name 推入数据库数组,如果未选中,则应将其删除。
所以如果我要检查 onDatabaseSelect 的值,它将是“stg_successfactors”
新值应如下所示:
databaseArr = {
unit_test_id: 166.
databases["iagdcanonprod.auiag.corp/project_entrust_australia_dev", stg_successfactors.ext_gpload_reusable_e24181c8_f3ed_11ea_836b_fa163e5628e8", "]
}
数据库状态存在于另一个组件中......我想知道我是否正确传递了道具?
const addToProduction = ({ target }, { id, databases: mappedDatabases }) => {
setProductionDatabaseData((previousState) => {
let newState = [...previousState];
if (target.checked) {
newState = [
...newState,
{
unit_test_id: id,
databases: [
...mappedDatabases,
...props.databases.map(({ object_name }) => object_name)
]
}
];
} else {
const i = newState.findIndex(({ unit_test_id }) => unit_test_id === id);
if (i !== -1) newState.splice(i, 1);
}
return newState;
});
};
解决方案
您可以将databases
状态数组映射到object_name
值数组
databases.map(({ object_name }) => object_name)
databases
并将映射的 UI 和对象名称数组中的数组传播到一个新数组中。您必须重命名解构databases
函数参数以避免名称与组件状态冲突。
const addToProduction = ({ target }, { id, databases: mappedDatabases }) => {
setProductionDatabaseData((previousState) => {
let newState = [...previousState];
if (target.checked) {
newState = [
...newState,
{
unit_test_id: id,
databases: [
...mappedDatabases,
...databases.map(({ object_name }) => object_name)
]
}
];
} else {
const i = newState.findIndex(({ unit_test_id }) => unit_test_id === id);
if (i !== -1) newState.splice(i, 1);
}
return newState;
});
};
推荐阅读
- ios - 如何实现动态可滚动的按钮菜单?
- sql - 当我想在 oracle 9i 中更新没有非数值的列时
- node.js - base64 图像 MongoDB 不会显示在 Img 标签上
- r - 按特定顺序合并多个数据帧 R
- r - R中的日期转换
- javascript - 在严格模式下访问回调中的公共值
- asp.net - Angular UI 重定向到 API URL
- ios - 您可以将 Apple TV 和 iOS 应用程序转移到另一个开发者帐户吗?
- c# - 在 asp.net 核心中使用自定义 IServiceProvider 实现
- git - 将公共 github 存储库作为依赖项后无法安装 npm