javascript - 受控禁用按钮 Material UI - React JS

标签 javascript reactjs material-ui

我有一个快速的问题 。我正在尝试有条件地禁用按钮。基本上,如果从我的表中选择了某些东西,那么我允许该按钮可用,否则它被禁用。我知道 MUI 需要一个 bool 值来禁用或启用按钮,所以从我的数组中我正在执行 forEach循环并获取选定的值。但是,即使我有 selected 的值,似乎也没有任何反应。任何想法我做错了什么?
我的数组:

data: [{
 ....
 selected : true / false
 ....
}]
我的按钮:
 <Tooltip title='Download'>
        <Button
            className={classes.root}
            key='DownloadAll'
            disabled={data.forEach(element => element.selected)}
            color='primary'
            onClick={(event) => buttonOnClick()}
        >
            <SvgIcon
                component={faDownload}
            />
        </Button>
    </Tooltip>

最佳答案

如果您需要返回 bool 值,只需使用 Array.prototype.some() :
以下是一个快速的现场演示,可以看到该方法的实际效果:

const { useState } = React,
      { render } = ReactDOM,
      rootNode = document.getElementById('root')
      
const App = () => {
  const [tableData, setTableData] = useState([
          {id:0, content: 'row1', selected: false},
          {id:1, content: 'row2', selected: false},
          {id:2, content: 'row3', selected: false}
        ]),
        onSelect = _id => {
          const tableDataShallowCopy = [...tableData],
                targetRowIdx = tableDataShallowCopy.findIndex(({id}) => id == _id)
          if(targetRowIdx>-1){
            tableDataShallowCopy.splice(targetRowIdx,1, {
              ...tableData[targetRowIdx],
              selected: !tableData[targetRowIdx].selected
            })
            setTableData(tableDataShallowCopy)
          }
        }
  return (
    <div>
      <table>
        <thead>
          <tr><th>Header</th></tr>
        </thead>
        <tbody>
          {
            tableData.map(({id,content,selected}) => (
              <tr 
                onClick={() => onSelect(id)}
                className={selected ? 'selected' : ''}
                key={id}
              >
                <td>
                  {content}
                  <input 
                    type="checkbox"
                    value={id}
                    checked={selected}
                  />
                </td>
              </tr>
            ))
          }
        </tbody>
      </table>
      <button disabled={!tableData.some(({selected}) => selected)}>Button</button>
    </div>
  )        
}  

render(
  <App />,
  rootNode
)
.selected {
  background-color: orange;
  color: #fff;
}

tr {
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js"></script><div id="root"></div>

关于javascript - 受控禁用按钮 Material UI - React JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62951514/

相关文章:

javascript - d3 设置色标的渐变数

node.js - Material-UI 迁移助手 : codemod-script?

javascript - Material UI withStyles on multiple styled HoCs

javascript - 在 Material UI 菜单组件中处理点击事件时出现问题

javascript - 两个 Action 形式

javascript - 如何防止用户更改 HTML 或 JavaScript 中的值

javascript - 如何在 d3 js 中正确使用 SVG 中的 Use 标签?

javascript - Material-ui jss 不尊重内容合理性

javascript - .jsx 和 .js 文件之间的技术区别是什么

javascript - 无法使用 redux-form 找到商店