小编Gon*_*alo的帖子

带有 useEffect(安装时)的自定义钩子执行多次

我有这个钩子,它在挂载上调用 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)

reactjs use-effect

5
推荐指数
1
解决办法
7405
查看次数

Django db_index=True 不创建索引,但类元索引是

在我的 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 并运行迁移/迁移后 …

django indexing

4
推荐指数
1
解决办法
3733
查看次数

标签 统计

django ×1

indexing ×1

reactjs ×1

use-effect ×1