- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在运行编辑功能并成功更新数据库后,我无法弄清楚如何使用数据库中的新数据更新组件。
我已经尝试执行 this.forceUpdate()
但它不起作用。我听说过使用 this.setState()
但我不知道如何使用数据库更新它,因为我的类状态是一个 JSON 数组。
几天来我一直在思考和搜索,但没有任何运气,所以非常感谢任何建议或帮助解决这个问题。
附言我正在为我的数据库使用 MySQL。我不知道这是否重要。
App.js
import React, { Component } from 'react';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.state = {
toggle: false,
toggleIdxArray: [],
classroom: [],
childflagged: '',
flagreason: '',
id: ''
};
this.eventHandler = this.eventHandler.bind(this);
this.logChange = this.logChange.bind(this);
this.handleEdit = this.handleEdit.bind(this);
}
logChange(e) {
this.setState({
[e.target.name]: e.target.value
});
}
handleEdit(event) {
event.preventDefault()
var data = {
childflagged: this.state.childflagged,
flagreason: this.state.flagreason,
id: this.state.id
}
fetch("/classroom/edit", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}).then(function(response) {
if (response.status >= 400) {
throw new Error("Bad response from server");
}
return response.json();
}).then(function(data) {
if (data.affectedRows === 1) {
console.log('Edited Flag!'); //UPDATE COMPONENT FUNCTION OF SOME-SORT HERE
}
}).catch(function(err) {
console.log(err)
});
}
eventHandler(event, idx) {
let updatedArr = this.state.toggleIdxArray.slice();
let checkIdx = updatedArr.indexOf(idx);
if (checkIdx === -1) updatedArr.push(idx);
else updatedArr.splice(checkIdx, 1);
this.setState((prevState) => ({
toggleIdxArray: updatedArr
})
);
}
componentDidMount() {
fetch("/classroom")
.then(res => res.json())
.then(classroom => this.setState({ classroom }))
}
render() {
return (
<div className="App">
<div className="wrapper">
<h1>Classroom</h1>
{this.state.classroom.map((classroom, idx) =>
<div className="child" key={classroom.id}>
<p className="detail">Child's Name: <span className={classroom.childflagged}>{classroom.childsname}</span> <i title={classroom.flagreason} className={'fa fa-flag flag' + classroom.childflagged}></i><i title={classroom.starreason} className={'fa fa-star star' + classroom.starstudent}></i></p>
<p className="detail">Parent's Phone Number: {classroom.parentsnumber}</p>
<div className="actionMenu">
<button className="flags" id={classroom.id} onClick={e => this.eventHandler(e, idx)}>Edit Flags</button>
<button className="results">View Results</button>
<button className="profile">View Profile</button>
</div>
<div className="actionForm">
<div>
<form id={"flagform" + classroom.id} className={this.state.toggleIdxArray.includes(idx) ? '' : 'hide'} onSubmit={this.handleEdit} method="post" autoComplete="no">
<input type="hidden" name="id" value={classroom.id} />
<input type="text" onChange={this.logChange} value={this.state.childflagged} name="childflagged" placeholder="Flag Type" />
<input type="text" onChange={this.logChange} value={this.state.flagreason} name="flagreason" placeholder="Reason For Flag" />
<input type="submit" onClick={() => this.state.id = classroom.id} name="submit" value="Save Changes" />
</form>
</div>
</div>
</div>
)}
</div>
</div>
);
}
}
export default App;
最佳答案
如果在数据库上更新数据后以有用的格式取回数据,只需对该数据使用 setState:
handleEdit(event) {
event.preventDefault()
var data = {
childflagged: this.state.childflagged,
flagreason: this.state.flagreason,
id: this.state.id
}
fetch("/classroom/edit", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}).then(function(response) {
if (response.status >= 400) {
//Aside: because of the way promises work, this is the correct way to throw the error. Doing this you can catch it in the "catch" callback
Promise.reject(new Error("Bad response from server"));
}
return response.json();
}).then((data) => {
if (data.affectedRows === 1) {
console.log('Edited Flag!'); //UPDATE COMPONENT FUNCTION OF SOME-SORT HERE
//use data to set state
this.setState({ classroom: data });
}
}).catch(function(err) {
console.log(err)
});
}
关于javascript - ReactJS 在不刷新浏览器的情况下检查数据库的更改和更新组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288531/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!