我目前正在尝试使用按钮来更改单击时ToDo的完成情况,但我只想启用前几天和当前一天的按钮。
例如,假设今天是星期三,那么我希望我的按钮在星期一、星期二和星期三启用,但在以后的日子不启用。
在我的API中,我无法获得要发送的天数,只有当天的id。所以Sun: 1 ... Sat:7
,我想不出办法做到这一点。
这是今天是星期天的代码片段,所以按钮应该被启用,但在剩下的日子里它被禁用了,这只是我试图实现的一个想法。
<div key={day.id}>
{habit.id === day.habitId && (
<>
{firstDay === "Sun" && day.id === 1 ?
<form onSubmit={onSubmit}>
{!day.isCompleted ?
<button type="submit" onClick={() => {setHandleChange([day.id, day.isCompleted]); setCompletion(!day.isCompleted)}}>[]</button>
: <button style={{ color: habit.color }} type="submit" onClick={() => setHandleChange([day.id, day.isCompleted])}>[]</button>
}
</form>
: <button disabled type="submit" onClick={(e) => { setHandleChange([day.id, day.isCompleted]); setCompletion(e.target.value) }}>[]</button>
}
</>
)}
</div>
CCD_ 2是通过操纵CCD_ 3得到的,因此它是一个动态变量。我如何使这个想法变得动态,这样,如果day.id === 7
,那么所有的按钮都可以点击,如果day.id === 1
,那么只有Sun
的按钮可以点击;如果day.id === 3
,那么Sun, Mon and Tue
可以点击,但不能点击其余的按钮?
您可以保留一个日期名称数组,然后使用getDay
来获取"今天";。然后在天数组上迭代,并且如果当前map
索引大于"0"的索引;今天";禁用按钮。
function Example() {
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
const today = new Date().getDay();
function handleClick(e) {
const { dataset: { day } } = e.target;
console.log(day);
}
function isDisabled(i) {
return i > today;
}
return (
<div>
{days.map((day, i) => {
return (
<button
data-day={day}
type="button"
onClick={handleClick}
disabled={isDisabled(i)}
>{day}
</button>
)
})}
</div>
);
};
ReactDOM.render(
<Example />,
document.getElementById('react')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="react"></div>