我有这个钩子,它在挂载上调用 redux 操作。所以我的猜测是应该执行一次。但事实并非如此。
useCategories.js
const useCategories = () => {
/*
Hook to call redux methods that will fetch the categories
of the exercises. Store it in redux store.
RETURN: loading, error, data
*/
const mainCategories = useSelector(state => state.categories.specialities);
const loading = useSelector(state => state.categories.loading);
const error = useSelector(state => state.categories.error);
const dispatch = useDispatch();
const onInitExercises = useCallback(
() => dispatch(actions.fetchCategories()),
[dispatch]
);
useEffect(() => {
console.log("[useCategories] --> UseEffect");
onInitExercises();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [onInitExercises]);
const data = …Run Code Online (Sandbox Code Playgroud) 在我的 django 模型中,当在字段定义中通过 db_index=True 创建索引时,不会创建索引。仅当我在 Meta 类中创建时
class Agreement(UUIDPrimaryKey):
job = models.ForeignKey(
'posts.Job',
on_delete=models.CASCADE,
verbose_name=_("job"),
)
class Meta:
indexes = (
models.Index(fields=['job']),
)
Run Code Online (Sandbox Code Playgroud)
如果我运行 makemigrations,就会创建索引。
Create index agreements__job_id_eb7df0_idx on field(s) job of model agreement
Run Code Online (Sandbox Code Playgroud)
但是如果我将模型更改为:
class Agreement(UUIDPrimaryKey):
job = models.ForeignKey(
'posts.Job',
on_delete=models.CASCADE,
verbose_name=_("job"),
db_index=True,
)
Run Code Online (Sandbox Code Playgroud)
我运行 makemigrations,索引被删除。
Remove index agreements__job_id_eb7df0_idx from agreement
Run Code Online (Sandbox Code Playgroud)
两个定义不应该相同吗?
更新
文档说它们是相同的。是的,两者都会创建索引。但是如果您在 Meta 中创建索引,并且在字段定义中未指定 db_index=False,则会创建两个索引。
这是在字段中设置 db_index=False 之前的情况
psql# select indexname from pg_indexes where tablename like 'agreemen%';
indexname
--------------------------------------------
agreements__job_id_eb7df0_idx
agreements_agreement_job_id_id_c26bd828
agreements_agreement_pkey
Run Code Online (Sandbox Code Playgroud)
设置 db_index=False 并运行迁移/迁移后 …