reactjs - 将数据回传到 api,而无需强制渲染组件完成所有操作
问题描述
我有一个反应组件,用于上下投票,我试图用它来发回数据。例如,按钮投票,按钮投票,更改内部状态以记录投票赞成或反对。
现在是时候将数据更改发布回 API。这个组件几乎是一个渲染组件:
<Feedbackify up={44} down={23} />
因此,您将当前的投票状态提供给它,它只会渲染它们,并且当前它会在您投票赞成或反对时修改自己的内部状态。我可以在组件内部从 POST 或 PUT 到 api,但我不希望这样做。通过某种方式从外部发布到组件的最惯用的方式是什么?
<Feedbackify up={44} down={23} onChange={someOnChange}/>
或者是否有更清洁的反应替代方法?
解决方案
一般的做法是把state up 列出来。因此,父组件具有赞成票和反对票的状态,Feedbackify
只传递给投票的值和someOnChange
(就像你一样)。在每次投票更改(someOnChange
待命)时,父级的状态都会更改,并且更新的投票作为道具传递给Feedbackify
. parent 还负责将数据发送到 api。
例子
class Parent extends React.Component {
constructor (p) {
super (p);
this.state = {
up: 0,
down: 0
}
}
someOnChange (event) {
let { up, down } = this.state;
// Assuming value will be positive for upvote and negative for downvote
if (event.target.value > 0)
up += event.target.value;
else
down += event.target.value;
doAsyncPost (up, down); // Post to server API
this.setState ({ up, down });
}
render () {
return <Feedbackify up={this.state.up} down={this.state.down} onChange={this.someOnChange.bind(this)}/>
}
}
此外,您可以考虑使用Redux集中管理所有组件的状态
推荐阅读
- c++ - 带有模拟“虚拟数据”的指针的继承和模板实例化
- javascript - 如何在 Laravel 刀片文件中使用 jquery 将选项附加到动态创建的选择元素
- solr - 如何拥有具有多个子约束的嵌套父查询
- visual-studio-code - 如何更改变音符号内的文本颜色?
- python - 如何将 seaborn 分布的 y 轴显示为百分比
- php - 为什么我在 Laravel Http 客户端中的“application/x-www-form-urlencoded”请求不起作用
- php - Symfony - 从安全路径中排除特定路由
- c# - 如何在 .Net 6 中创建测试服务器?
- python - 使用标准 csv.reader 方法拆分 CSV 文件
- c - SD卡SPI接口写入响应无效