我有一个json
文件,其中包含一个数组,其中包含一些json.bc
请求显示的名为fetch()
的对象。在每个项中都有一个名为renderTotal
的函数。 <span className="Total-Price"></span>
的值将由renderTotal
调用。render中有一个按onclick函数的按钮:
<button onClick={((e)=>this.ChangePrice(e,this.renderChangePrice(element)))}>Select</button>
renderTotal
的值将由ChangePrice
函数更改。让我们调试renderTotal
中的内容:
renderTotal(element, NewAmount) {
let Total = element.total
if (NewAmount == '') {
return new Intl.NumberFormat().format(Total)
} else {
return Total + NewAmount
}
}
renderTotal
的输出取决于NewAmount
,默认情况下NewAmount
为空,如果NewAmount
为空,则根据代码,renderTotal
的输出为element.total
,但通过运行ChangePrice
函数NewAmount
不为null:
renderChangePrice(element){
return 1000
}
ChangePrice = (e,elem) =>
this.setState(
{
NewAmount: elem
},
() => {
this.reorganiseLibrary();
}
)
例如,通过运行ChangePrice
,NewAmount
将为1000,并根据renderTotal
中的条件,renderTotal
的输出将为Total + NewAmount
。 renderTotal
的输出是:
1000,5000,2000
运行ChangePrice
将会是:
2000,6000,3000
知道一切都很好,但是当我第二次运行ChangePrice
时,我希望结果是这样的:
3000,7000,4000
我的意思是将NewAmount
添加到renderTotal
的最后一个输出中,而不是renderTotal
的默认输出中,但是我又得到了:
2000,6000,3000
并且每次运行ChangePrice
时,renderTotal
的输出将为NewAmount
+ renderTotal
的最后一个输出。我该怎么办?
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
data: [],
library: null,
NewAmount: "",
}
}
componentDidMount() {
fetch('/json.bc', {
method: 'POST',
})
.then(response => response.text())
.then(text => {
const Maindata = JSON.parse(text.replace(/\'/g, '"'))
this.setState(state => ({
...state,
data: Maindata
}), () => {
this.reorganiseLibrary()
})
}).catch(error => console.error(error))
}
reorganiseLibrary = () => {
const { data } = this.state;
let library = data;
library = _.chunk(library);
this.setState({library})
}
handlePerPage = evt => {
this.setState({
perPage: evt.target.value
}, () => this.reorganiseLibrary());
}
// handle render of library
renderLibrary = () => {
const { library } = this.state;
if (!library || (library && library.length === 0)) {
return <div className="nodata">No data</div>
}
return library.map((item, i) => (
<div>
<span className="Total-Price">{this.renderTotal(item, this.state.NewAmount)}</span>
</div>
))
}
render() {
const { library } = this.state;
return (
<div>
{this.renderLibrary()}
<button onClick={((e)=> this.ChangePrice(e,this.renderChangePrice(element)))}>Select</button>
</div>
)
}
renderTotal(element, NewAmount) {
let Total = element.total
if (NewAmount == '') {
return new Intl.NumberFormat().format(Total)
} else {
return Total + NewAmount
}
}
renderChangePrice(element){
return 1000
}
ChangePrice = (e,elem) =>
this.setState(
{
NewAmount: elem
},
() => {
this.reorganiseLibrary();
}
)
}
ReactDOM.render(<App />, document.getElementById('Result'))
已编辑:
renderTotal(element, NewAmount) {
let Total = element.total
if (NewAmount == '') {
return new Intl.NumberFormat().format(Total)
} else {
let SliceElementSign = NewAmount.slice(0,1)
let SliceElementNumber = parseInt(NewAmount.substr(1))
if (SliceElementSign=='+'){
return Total+SliceElementNumber
}else{
return Total-SliceElementNumber
}
}
}
答案 0 :(得分:0)
我可以看到您的代码中有几个问题。
NewAmount
的状态从''
更改为1000
,然后它将永远停留在1000
。您不是将值同样更新为1000, 2000, 3000...
。NewAmount
的值,至少可以将library
元素的Total
的值更新为最新。当前,每次调用ChangePrice
时,都会将NewAmount设置为1000
,因为renderChangePrice
总是返回1000
并将其添加到元素{{1 }}。
按以下方式更新ChangePrice逻辑可能会有所帮助。
Total