Превышена максимальная глубина обновления при попытке передать дочернюю функцию через props

#reactjs #jsx

#reactjs #jsx

Вопрос:

Я держу массив json внутри своего основного компонента, и я создал «FormComponent», который содержит входные данные.

Я создал функцию «добавить» внутри родительского компонента и пытаюсь отправить ее дочернему элементу через prop под именем createTODOhander , как вы можете видеть здесь:

 import * as React from "react";
import Task from "./Task";
import FormComponent from "./FormComponent";


class TodoList extends React.Component {
    state = {
        MAXIMUMJOBS: 5,
        TodoList: [],
    }
    createTODO = (Todoname) => {
        this.setState({
            TodoList: this.state.TodoList.concat({Todoname: Todoname})
        })
    }
    render() {
        return (
            <div style={{marginLeft: '10px'}}>
                <h3>You can enter {this.state.MAXIMUMJOBS - this.state.TodoList.length} TODO list jobs.</h3>
                <FormComponent createTODOhandler={this.createTODO()} />
            )
    }
}
 

На FormComponent я пытаюсь использовать это таким образом:

 import * as React from "react";


class FormComponent extends React.Component {
    state = {
        inputValue: ''
    }
    inputChanged = (e) => {
        this.setState({
            inputValue: e.target.value
        })
    };
    createTODO = () => {
        if (this.state.inputValue === '') {}//do nothing, not gonna happen because the button is disabled.
        else{
            this.props.createTODOhandler(this.state.inputValue);
        }
    };
    render() {
        return (
            <div>
                <input type="text" onChange={this.inputChanged} value={this.state.inputValue}
                       placeholder={"Enter your job here."}/>
                amp;nbsp;
                <button onClick={this.createTODO}>Add!</button>
                amp;nbsp;
                <button>Clear list</button>
            </div>
        )
    }
}

export default FormComponent;
 

Но я получаю Maximum update depth exceeded. сообщение об ошибке,

Спасибо за вашу помощь.

Ответ №1:

Должно быть удалено () из реквизита.

Это <FormComponent createTODOhandler={this.createTODO()} />

Изменено на: <FormComponent createTODOhandler={this.createTODO} />

Ответ №2:

Это ваша ошибка:

 <FormComponent createTODOhandler={this.createTODO()} />
 

Вы выполняете функцию каждый раз, когда визуализируете компонент. Вместо этого вам нужно иметь только ссылку на функцию:

 <FormComponent createTODOhandler={this.createTODO} />