我遇到了条件渲染的问题。这是我的 100% 工作视图:
function todoItem(todo) {
return li('.list-item',[
todo.editing ? input('.todo-edit', {type: 'text', value: todo.text, autofocus: true, attributes: { 'data-id': todo.id }}) : '',
!todo.editing ? span(`.todo ${todo.completed ? '.completed' : ''}`, { attributes: { 'data-id': todo.id }}, todo.text) : '',
button('.remove-todo', {type: 'button', value: todo.id}, 'remove'),
todo.completed ? button('.unmark-todo', {type: 'button', value: todo.id}, 'unmark') : '',
!todo.completed ? button('.mark-todo', {type: 'button', value: todo.id}, 'mark as done') : ''
]);
const view = (state$) => {
return state$.map(todos =>
div([
input('.todo-input', {type: 'text', placeholder: 'Todo', value: ''}),
ul(todos.items.map(todo => todoItem(todo))),
footer(todos)
])
);
};
问题是当我尝试将条件按钮更改为 if-else 而不是两个单独的条件时:
todo.completed ?
button('.unmark-todo', {type: 'button', value: todo.id}, 'unmark') :
button('.mark-todo', {type: 'button', value: todo.id}, 'mark as done')
似乎它将按钮切换为“取消标记”,然后再次切换回“标记”(我已经通过控制台日志确认了这一点)。我的意图被映射到这两个类.mark和.unmark,所以我认为这不是问题......
这是一个实际的错误还是我错过了什么?