array.splice不工作它总是删除最后一个元素

时间:2018-05-29 08:28:30

标签: javascript reactjs

    add() {
    rendercomponent.push(UiInput);
    childJson.push(this.dynamicJson())
    this.setState({ documents: rendercomponent, Json: childJson });

}
componentDidMount() {
    rendercomponent.push(UiInput);
    this.setState({ documents: rendercomponent })
}
dynamicJson() {
    return {
        "service": this.state.formValues.text,
        "tax": this.state.formValues.tax,
        "amount": this.state.formValues.amount
    }
}
popComponent = (index) => {
    console.log(`in parent-->>${index}`)
    rendercomponent.splice(index, 1);
    childJson.splice(index, 1);
    this.setState({ documents: rendercomponent,Json: childJson,formValues:{} })

};  render() {
    return (
        <div>
    {this.state.documents.map((Element, index) => {
                                    return <Element key={index} index={index} onUpdate={this.onUpdate} popComponent={() => this.popComponent(index)} />
                                })}
          </div>
);
}

array.splice无法正常工作它总是删除数组中的最后一个元素

在我的UI中,有一个按钮可以添加组件,在该按钮add()上调用函数

还有删除按钮,在删除按钮popComponent()上调用函数。

我想删除特定元素,它总是删除redercomponent数组中的最后一个元素。

请帮我解决这个问题

2 个答案:

答案 0 :(得分:0)

package sometests import ( "fmt" "testing" ) func TestScanf(t *testing.T) { fmt.Printf("type someting:\n") var s string fmt.Scanf("%s\n", &s) // test should wait here for me to type, but it won't fmt.Printf("you type: %q\n", s) } 会改变对象splice,但不会更改该对象的引用。如果引用没有改变,则反应将不会重新呈现它,因为根据react的diffing算法,它不会有所不同。因此,您可以使用rendercomponent代替slice。这样新对象的引用对于早期的对象应该是不同的。

检查splice

也许

rendercomponent!== rendercomponentModified

答案 1 :(得分:0)

如果index为-1, pv = pd.pivot_table(df, index=['customer_name2'], columns=['FY'], values=['amount'], aggfunc=sum, fill_value=0) pv2 = pv.reindex(pv['amount'].sort_values(by='FY17', ascending=True).index).head(x_bottom) trace1 = go.Bar(x=pv2.index, y=pv2[('amount','FY17')], name='Revenue') graphs.append(html.Div(dcc.Graph( id='chart_id_6', figure={ 'data': [trace1], 'layout': { 'title': 'Bottom ' + str(x_bottom) + ' Customers' } }))) 将只删除数组的最后一项