反应不会在状态更改时重新呈现

扬·扬科夫斯基

我有这个功能组件:

const PriorityInput = () => {
  const [isActive, setIsActive] = useState({
    taskPriorityLow: false,
    taskPriorityMedium: false
  });

  const onPriorityClick = name => {
    Object.keys(isActive).forEach(key =>
      key === name ? setIsActive({ ...isActive, [key]: true }) : setIsActive({ ...isActive, [key]: false })
    );
  };

  return (
     <div className="task-priority-input-container">
        <label className="task-priority-input-label">Priority</label>
        <span
          className={
            isActive.taskPriorityLow
              ? "task-priority-button task-priority-low-active"
              : "task-priority-button task-priority-low"
          }
          onClick={() => onPriorityClick("taskPriorityLow")}
        >
          LOW
        </span>
<span
          className={
            isActive.taskPriorityLow
              ? "task-priority-button task-priority-medium-active"
              : "task-priority-button task-priority-medium"
          }
          onClick={() => onPriorityClick("taskPriorityMedium")}
        >
          MEDIUM
        </span>
      </div>
  );
};

export default TaskForm;

但是,当我单击span其样式时,它的样式不会改变。

从类似的问题中,我了解到setIsActive()使用传播对象进行调用会触发重新呈现。

syJSdev

一月。我认为没有必要每个声明。

试图这样做。

const PriorityInput = () => {
  const [isActive, setIsActive] = React.useState({
    taskPriorityLow: false,
    taskPriorityMedium: false,
    taskPriorityHigh: false,
  });

  const onPriorityClick = name => {
    console.log("clicked - ", name);
    const updateActive = {...isActive};
    Object.keys(isActive).forEach(key => {
      if(key === name)
        updateActive[key] = true;
      else
        updateActive[key] = false;
    });
    
    setIsActive(updateActive);
  };

  return (
     <div className="container">
        <label className="input-label">Priority</label>
        <span
          className={
            isActive.taskPriorityLow
              ? "btn btn-primary"
              : "btn btn-secondary"
          }
          onClick={() => onPriorityClick("taskPriorityLow")}
        >
          LOW
        </span>
        <span
          className={
            isActive.taskPriorityMedium
              ? "btn btn-primary"
              : "btn btn-secondary"
          }
          onClick={() => onPriorityClick("taskPriorityMedium")}
        >
          MEDIUM
        </span>
        <span
          className={
            isActive.taskPriorityHigh
              ? "btn btn-primary"
              : "btn btn-secondary"
          }
          onClick={() => onPriorityClick("taskPriorityHigh")}
        >
          HIGH
        </span>
      </div>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(<PriorityInput />, rootElement);
<link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.7.0-alpha.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.7.0-alpha.2/umd/react-dom.production.min.js"></script>
<div id="root"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

反应-不会在状态更改时重新呈现

React组件不会在状态更改时重新呈现

React不会在状态更改时重新呈现

组件不会在状态更改时重新呈现?

组件不会在状态更改时重新呈现

动态呈现的 React 组件不会在父状态更改时重新呈现

React-redux组件不会在商店状态更改时重新呈现

React Redux-子组件不会在状态更改时重新呈现

此.props.children不会在父状态更改时重新呈现

Vue 列表项不会在状态更改时重新呈现

React / Redux组件不会在状态更改时重新呈现

React子组件不会在状态更改时重新呈现

React + Redux:组件不会在状态更改时重新呈现

同级组件不会在状态更改时重新呈现(使用useEffect,useState和Context)

反应组件不会在父组件 firebase 的状态更改时重新渲染

FlatList不会在道具更改时重新呈现

React useContext 不会在状态更改时重新渲染

反应无状态子组件不会在父组件的状态更改时更新

Reactjs:为什么子组件不会在数据更改时重新呈现?

React Router - 页面不会在路由更改时重新呈现

导航栏不会在路由器位置更改时重新呈现

当可观察数组更改时,ListItem 不会在 FlatList 中重新呈现

反应useCallback不会在第一次更改时更新状态onChange

Gatsby-Redux:组件不会在状态更改时重新渲染

React 功能组件不会在状态更改时重新渲染

React 不会在状态和道具更改时重新渲染

React 视图不会在状态更改时更新

useEffect不会在路由更改时更新状态

React JS组件不会在状态更改时更新