【发布时间】:2018-08-05 15:03:30
【问题描述】:
我在我的 reactjs 项目中得到了以下代码。
这背后的想法是点击按钮,然后editTodoStatus函数会改变lists对象的完整状态。
import { Button } from 'reactstrap';
import React, { Component } from "react";
import ReactDOM from "react-dom";
import * as TodoActions from "../actions/TodoActions";
class List extends Component {
constructor() {
super();
this.state = {
lists:TodoStore.getTodos()
};
}
editTodoStatus(event){
const id = event.target.parentNode.dataset.id;
TodoActions.editTodoStatus(id);
}
componentWillMount(){
TodoStore.on("create", this.getStoreData.bind(this));
TodoStore.on("edit", this.getStoreData.bind(this));
}
getStoreData(){
this.setState({
lists: TodoStore.getTodos()
});
}
return(
<div>
{
this.state.lists.map(
function(todo){
if (todo.complete){
complete = <Button color="info"><i className="fa fa-check" /></Button>;
}else{
complete = <Button color="danger" onClick = {this.editTodoStatus.bind(this)} ><i className="fa fa-times" /></Button>;
}
return (
<li key = {todo.id} >
{complete}
</li>
);
}.bind(this)
);
}
</div>
);
}
export default List;
但是,该应用将仅重新呈现 Button 元素并忽略其中的 <i> 元素,这意味着 <i> 保持不变。
但如果我删除 <Button> 元素,<i> 将按预期重新渲染。
我不确定这背后的原因和问题的解决方案。
这是我的项目的链接。 https://johnhckuo.github.io/Todo-List/
如果你按下红色按钮使这个待办事项“完成”,你会看到问题(按钮的颜色改变了,但里面的图标没有改变)
我非常感谢任何建议。
【问题讨论】:
-
您没有在映射函数中返回任何内容
-
用你当前的代码什么都不应该呈现,你在哪里使用
complete? -
@MayankShukla 抱歉,我已经简化了代码,忘记添加返回部分:p 已编辑!
-
@Axnyff 对不起,我忘记添加返回部分>
-
您正在为
button使用任何库,或者您已经定义了该组件?
标签: javascript reactjs font-awesome