Reactjs 基于道具变更,反应组件不重新招标

Reactjs 基于道具变更,反应组件不重新招标,reactjs,Reactjs,我的react组件中有一个prop-classifiers数组,当通过表单上传文件时,该数组会发生变化。我必须根据分类器数组的值填充表单中的分类器字段。当分类器数组被更改,但列表没有被填充时,我调用this.render() 建造商: constructor() { super(); this.classifiers = []; } 渲染方法: render() { if(this.classifiers.length!==0){ ret

我的react组件中有一个prop-classifiers数组,当通过表单上传文件时,该数组会发生变化。我必须根据分类器数组的值填充表单中的分类器字段。当分类器数组被更改,但列表没有被填充时,我调用this.render()

建造商:

constructor() {
        super();
        this.classifiers = [];
}
渲染方法:

render() {
    if(this.classifiers.length!==0){
        return(
           <form>
           </form>
        )
    }
    else{
        return(
            <form>
            </form>
        )
    }
}
render(){
if(this.classifiers.length!==0){
返回(
)
}
否则{
返回(
)
}
}

假设表单组件编写正确。当我将一些控制台日志放入渲染的if和else中时,它们工作正常,但该组件不会使用新的分类器重新渲染。

该组件不会由道具更新,而是状态。。。更改道具的状态

this.setState({ whateverHere })

该组件不是由道具更新的,而是状态。。。更改道具的状态

this.setState({ whateverHere })
我的react组件中有一个道具分类器数组,它会发生变化 通过表单上载文件时

分类器与prop无关,它是一个类变量

我必须根据值填充表单中的classifiers字段 对分类器数组进行分类

当您在组件中的某些内容不时发生更改或变化时,请使用状态

this.state = {
    classifier: []
}
我称之为。render()

它应该由react调用,而不是由用户显式调用。不要中断流程

我想你可以很好地改变。 如果没有,您可以将其更改为

const updateClassifier = (items= []) => {
    this.setState((prevState) => {
        return {
            classifier: [...prevState.classifier, ...items]
        }
    })

}
用于呈现窗体

const renderMyForm = () => {
    if(this.state.classifier.length !== 0){
        return (<form></form>);
    } else {
        return (<form></form>);
    }

}

render() {
    { renderMyForm ()}
}
const renderMyForm=()=>{
if(this.state.classifier.length!==0){
返回();
}否则{
返回();
}
}
render(){
{renderMyForm()}
}
我的react组件中有一个道具分类器数组,它会发生变化 通过表单上载文件时

分类器与prop无关,它是一个类变量

我必须根据值填充表单中的classifiers字段 对分类器数组进行分类

当您在组件中的某些内容不时发生更改或变化时,请使用状态

this.state = {
    classifier: []
}
我称之为。render()

它应该由react调用,而不是由用户显式调用。不要中断流程

我想你可以很好地改变。 如果没有,您可以将其更改为

const updateClassifier = (items= []) => {
    this.setState((prevState) => {
        return {
            classifier: [...prevState.classifier, ...items]
        }
    })

}
用于呈现窗体

const renderMyForm = () => {
    if(this.state.classifier.length !== 0){
        return (<form></form>);
    } else {
        return (<form></form>);
    }

}

render() {
    { renderMyForm ()}
}
const renderMyForm=()=>{
if(this.state.classifier.length!==0){
返回();
}否则{
返回();
}
}
render(){
{renderMyForm()}
}

add code where you calling this.render()add code you calling this.render()接受了另一个答案,因为它非常复杂,对于像我这样的初学者来说很容易实现。谢谢你的回答。我接受了另一个答案,因为它非常复杂,对于像我这样的初学者来说很容易实现。谢谢你的回答。