首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Concat运行两次,但if语句只运行一次,控制台显示只运行一次

问Concat运行两次,但if语句只运行一次,控制台显示只运行一次
EN

Stack Overflow用户
提问于 2021-01-20 16:37:21
回答 1查看 58关注 0票数 0

我有一个if else语句,如果它是userActionAdded为false,那么将运行以下情况:

代码语言:javascript
复制
  case ADD_USER_ACTION:
      console.log('running now!')
      return {
        ...state,
        userActionAdded: true,
        columns: state.columns.concat({title:'action1'}),
      };

然而,我发现我的列的长度从4变成了6,因此我希望它的长度是of5,所以我尝试了console.log('running now!')if-else语句,但它只运行一次。

我的app.js:

代码语言:javascript
复制
{editUserColumns(userActionAdded)}
<Table columns={columns} dataSource={data}/>
{console.log(columns)}

将调用editUserColumns,并且在editUserColumns上:

我的State.js

代码语言:javascript
复制
  const editUserColumns = (userActionAdded) => {
    if (userActionAdded) {
    } else {
      console.log("loaded");
      dispatch({
        type: ADD_USER_ACTION,
      });
    }
  };

还有我的减速机

代码语言:javascript
复制
    case ADD_USER_ACTION:
      console.log("running now!");
      return {
        ...state,
        userActionAdded: true,
        columns: state.columns.concat({title:'action1'}),
        
      };

State.js控制台日志返回running only only,reducer也返回running only,但对于app.js console.log运行两次,这是我所期望的。

但是,app.js控制台日志输出数组的输出长度为6而不是5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-20 17:31:38

只要稍微改变一下你的减速机

代码语言:javascript
复制
case ADD_USER_ACTION:
  console.log('before we had: ', state.columns.length)
  const newState = {
    ...state,
    userActionAdded: true,
    columns: state.columns.concat({title:'action1'}),
  }
  console.log('now we have: ', newState.columns.length)
  return newDtate

为了更清楚地看到发生了什么,或者您可以将此条件放在reducer中

代码语言:javascript
复制
case ADD_USER_ACTION:
  return state.userActionAdded
    ? state
    :  {
      ...state,
      userActionAdded: true,
      columns: state.columns.concat({ title:'action1' }),
    }

更新:

它是在JSX内部吗?

代码语言:javascript
复制
{editUserColumns(userActionAdded)}
<Table columns={columns} dataSource={data}/>
{console.log(columns)}

不,请不要那样做。将函数从JSX中分离出来,如果是App.js,如果是函数组件,则编写如下

代码语言:javascript
复制
const App = (props) => {
  const { userActionAdded } = props
  useEffect(() => editUserColumns(userActionAdded), [userActionAdded])

  console.log(columns)
  return <Table columns={columns} dataSource={data} />
}

然后,它将正常工作,并仅在值更改时进行检查

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65805835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档