我有一个图表组件,它将在第一次单击onSubmit时更新,当我输入数据到表单中时,但一次,但当我再次输入数据时,它需要2次单击,以便图表更新。我有一个DataVars组件,它包含表单,将输入添加到道具,然后呈现图表组件宪章
import React, {Component} from 'react'
import Charter from './Charter'
class DataVars extends Component{
constructor() {
super();
this.state = {
interest_rate:'0.5',
}
this.handleSubmit = this.handleSubmit.bind(this)
}
handleSubmit(event){
event.preventDefault();
this.setState({
interest_rate: this.element.value
},
() => { console.log("setState completed", this.state) });
}
render(){
return(
<div>
<Charter interest_rate={this.state.interest_rate}/>
<form onSubmit={this.handleSubmit}>
<input type="text" name="interest_rate" ref={el => this.element = el} />
<input type="submit" value="Submit" />
</form>
</div>
);
}
}
export default DataVars
//Charter.js
import React, {Component} from 'react';
import { Line } from 'react-chartjs-2';
import Chart from 'chart.js';
var data = {
labels: ["Year 1", "Year 2", "Year 3", "Year 4", "Year 5", "Year 6","Year 7","Year 8","Year 9","Year 10"],
datasets: [
{
label: "First dataset",
data: [],
fill: false,
backgroundColor: "rgba(75,192,192,0.2)",
borderColor: "rgba(75,192,192,1)"
}
]
};
export default class LineDemo extends Component {
componentDidMount(){
var initial_value =10
data.datasets[0].data = this.compoundList(initial_value)
console.log(data.datasets[0].data[0])
let lineChart = this.reference.chartInstance
lineChart.update();
}
componentDidUpdate(){
var initial_value =10
data.datasets[0].data = this.compoundList(initial_value)
console.log(data.datasets[0].data[0])
let lineChart = this.reference.chartInstance
lineChart.update();
}
compoundList(initial_value){
var current_value =initial_value
const interest_rate = this.props.interest_rate
var compoundList =[];
for (var i =0; i < 10; i++){
current_value = this.calculateCompound(current_value, interest_rate)
compoundList.push(current_value);
}
return compoundList;
}
calculateCompound(current_value, interest_rate){
return current_value + (current_value * interest_rate)
}
render(){
return (
<div>
<Line data={data} ref={(reference) => this.reference = reference}/>
<h1>Interest Rate: {this.props.interest_rate}</h1>
</div>
);
}
}
我试图在setState之后触发控制台日志命令,但仍然遇到同样的问题。是否有一种方法可以只在国家更新时呈现宪章组件,而不是异步地呈现?
谢谢你的意见。
但是,您可以将数据存储在状态中,并允许行
在状态更改时重新呈现,而不是手动更新,
// charter.js
import React, { Component } from "react";
import { Line } from "react-chartjs-2";
import Chart from "chart.js";
// var data = {
// labels: [
// "Year 1",
// "Year 2",
// "Year 3",
// "Year 4",
// "Year 5",
// "Year 6",
// "Year 7",
// "Year 8",
// "Year 9",
// "Year 10"
// ],
// datasets: [
// {
// label: "First dataset",
// data: [],
// fill: false,
// backgroundColor: "rgba(75,192,192,0.2)",
// borderColor: "rgba(75,192,192,1)"
// }
// ]
// };
export default class Charter extends Component {
state = {
data: {
labels: [
"Year 1",
"Year 2",
"Year 3",
"Year 4",
"Year 5",
"Year 6",
"Year 7",
"Year 8",
"Year 9",
"Year 10"
],
datasets: [
{
label: "First dataset",
data: [],
fill: false,
backgroundColor: "rgba(75,192,192,0.2)",
borderColor: "rgba(75,192,192,1)"
}
]
}
};
componentDidMount() {
var initial_value = 10;
let data = this.state.data;
data.datasets[0].data = this.compoundList(initial_value);
console.log(data.datasets[0].data[0]);
let lineChart = this.reference.chartInstance;
lineChart.update();
}
componentDidUpdate(prevProps) {
if (prevProps.interest_rate !== this.props.interest_rate) {
var initial_value = 10;
let data = this.state.data;
data.datasets[0].data = this.compoundList(initial_value);
console.log(data.datasets[0].data[0]);
// let lineChart = this.reference.chartInstance;
// lineChart.update();
this.setState({ ...data });
}
}
compoundList(initial_value) {
var current_value = initial_value;
const interest_rate = this.props.interest_rate;
var compoundList = [];
console.log("+++ called +++");
for (var i = 0; i < 10; i++) {
current_value = this.calculateCompound(current_value, interest_rate);
compoundList.push(current_value);
}
return compoundList;
}
calculateCompound(current_value, interest_rate) {
return current_value + current_value * interest_rate;
}
render() {
return (
<div>
<Line
data={this.state.data}
ref={reference => (this.reference = reference)}
/>
<h1>Interest Rate: {this.props.interest_rate}</h1>
</div>
);
}
}
我的代码生成一个输入字段,允许用户输入要搜索的值。然后当他们单击提交按钮时,它会使displayMap为true,因此当MapDisplay组件呈现时,它将通过Map组件触发API搜索并返回随后显示在地图上的值。 问题是这个过程只工作一次。当我再次单击该按钮时,它确实做了一些事情,我确认它正在输入框中获取新值,但我似乎不知道如何再次渲染地图。 我尝试在this.setState中设置其他变量,试图
我试图在我的活动中添加一个带有片段的选项卡,但它没有响应或事件显示。 这是我下面的代码。 这是我的主要活动: 这是我的PagerAdapter:
当我单击submit或register时,需要两次单击才能完成任何操作。如何修复此问题?
我正在尝试更新具有父状态的道具的子组件。当用将父级的状态更改为my knowlage时,chlid应该重新执行。但是,当child位于数组中时,rerender不会Occure。我怎么才能修好?提前谢了。 我的app功能:
我有一个项目使用以下代码调用componentDidMount()上的API服务 我的组件将过滤器从redux存储区传递到API调用。 但是,如果过滤器通过另一个组件发生变化怎么办?我似乎找不到正确的生命周期方法来在发生这种情况时重新调用api。
问题内容: 我正在尝试使用Javascript提交表单的数据。这是html。 这是该函数的Javascript 。 我的问题是Javascript可以运行,但是表单仍在处理并刷新页面。 我把代码放在希望它可以阻止窗体刷新。 问题答案: 您将必须在onsubmit处理程序的post()函数之后放置return false部分,如下所示: