ReactJs: как отправить функцию как опору в цикле

Может ли кто-нибудь сказать мне, как я могу отправить функцию в цикл, я получил ошибку, если я отправлю ее прямо в цикл. есть ли способ отправить функцию в цикл и вызвать ее из функции

у меня есть CommentListItem.js, в котором я вызываю SubCommentListItem

<SubCommentListItem 
                            key = {subcomment.id} 
                            data = {subcomment} 
                            parentid = {commentID} 
                            updateComment = {(comment) => this.updateComment()}
                            user = {user} postid = {postid} 
                            />

и в SubCommentListItem я вызываю компонент формы

            {this.state.showForm ? (<CommentForm updateComment = {this.updateComment} class = {'subCommentFormBox'} parentid = {this.state.parentid} postid = {postid} user = {user} />):(<div></div>)}

вот функция updateComment, но она не обновляет поддержку CommentListITem

updateComment(comment) {
        this.setState({showForm:false})
        this.props.updateComment(comment)
    }

Хотите использовать реквизит, чтобы я мог перезвонить

user7362157 10.02.2019 20:49

Есть два способа (ну, несколько, но вот два), вы должны сделать функцию лямбдой, т.е. заменить «функция (подкомментарий, i)» на «(подкомментарий, i) =>», иначе «это» будет ссылаться на this.state.subcomments, или вы можете заменить "function (subcomment, i)" на "function (subcomment, i, subcomments)" и заменить "this.state.subcomments" на "subcomments", отображает третий аргумент как сам массив .

Countingstuff 10.02.2019 20:52

Для полноты позвольте мне добавить, что еще один способ сделать это - определить метод в вашем классе, commentsMap(subcomment, i) ... а затем в вашем конструкторе сделать this.commentsMap = this.commentsMap.bind(this), затем "this" всегда будет ссылаться на созданный вами экземпляр класса, и вы можете сделать "this.state.subcomments.map(this.commentMap)"

Countingstuff 10.02.2019 20:55

нет, это не работает таким образом

user7362157 10.02.2019 21:00

Что вы подразумеваете под "не работает"?

Treycos 10.02.2019 22:09

есть ли способ поделиться своими файлами?

user7362157 10.02.2019 22:11

Я не думаю, что это понадобится. Вы можете отредактировать свой вопрос и распечатать ошибку, которую вы получаете в нем. Вы также можете добавить соответствующий код и более подробное объяснение вашей проблемы.

Treycos 10.02.2019 22:12

я добавил, пожалуйста, проверьте

user7362157 10.02.2019 22:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
67
2

Ответы 2

Попробуй это

{this.state.subcomments.map(function (subcomment, i) {
      return (
              <SubCommentListItem key = {subcomment.id} 
                subcomment= {this.state.subcomments} 
                data = {subcomment} parentid = {commentID} 
                user = {user} postid = {postid}
                yourfunctionname = {() => this.props.yourfunction()}
               />
              );
 })}

я получаю эту ошибку Предупреждение: Не удается выполнить обновление состояния React для несмонтированного компонента. Это не работает, но указывает на утечку памяти в вашем приложении. Чтобы исправить, отмените все подписки и асинхронные задачи в методе componentWillUnmount. в форме комментария (в subCommentListItem.js:58)

user7362157 10.02.2019 21:18

Вам нужно будет внести несколько изменений в код.

Во-первых, функция обновления. Давайте превратим это в стрелочную функцию, чтобы вам не нужно было bind:

updateComment = comment => {
    this.setState({ showForm:false })
    this.props.updateComment(comment)
}

Теперь просто отправьте ссылку на него в свой реквизит:

<SubCommentListItem
    key = {subcomment.id}
    data = {subcomment}
    parentid = {commentID}
    updateComment = {props.updateComment}
    user = {user} postid = {postid}
/>

А вот как это можно вызвать внутри SubCommentListItem:

this.props.updateComment(yourComment)

Этот синтаксис такой же, как и в его родительском компоненте.

Кроме того, следующий код:

{this.state.showForm ? (<CommentForm updateComment = {this.updateComment} class = {'subCommentFormBox'} parentid = {this.state.parentid} postid = {postid} user = {user} />):(<div></div>)}

Можно сократить до этого:

{this.state.showForm && <CommentForm updateComment = {this.updateComment} class='subCommentFormBox' parentid = {this.state.parentid} postid = {postid} user = {user} />}

И я бы рекомендовал использовать className в React вместо class.

он говорит TypeError: Невозможно прочитать свойство updateComment неопределенного

user7362157 10.02.2019 22:34

Это означает, что this.props не определен, можете ли вы показать мне компонент, использующий его (редактируя свой вопрос)

Treycos 10.02.2019 22:35

проверить это изображение awesomescreenshot.com/image/3860951/…

user7362157 10.02.2019 22:40

Лол, this не определен... интересно. Покажите мне полный код класса

Treycos 10.02.2019 22:41

Неважно, вы используете компонент без сохранения состояния и забыли нам об этом сообщить. Просто используйте props.updateComment и убедитесь, что вы получаете переменную props в своей функции.

Treycos 10.02.2019 22:48

Например: const SubCommentListItem = props => { /* your logic */ }.

Treycos 10.02.2019 22:49

я исправил эту проблему, теперь проблема в SubCommentListItem.js

user7362157 10.02.2019 22:51

когда он вызывает эту функцию updateComment(comment) {this.setState({showForm:false}) this.props.updateComment(comment)}

user7362157 10.02.2019 22:52

теперь все работает нормально.

user7362157 10.02.2019 22:59

если я устанавливаю состояние и вызываю реквизиты, это тоже не работает, но я делаю только одно, это работает, в чем проблема

user7362157 10.02.2019 22:59

Мне нужно будет увидеть объявление вашего класса, вы должны отредактировать свой ответ и просто удалить функции, которые не имеют отношения к вашей проблеме.

Treycos 10.02.2019 23:02

вы ошибаетесь, если ваш ответ означает, что updateComment — это функция props в CommentListItem.js, которую я передаю в SubCommentListItem, но updateComment — это функция CommentListItem.js, поэтому, когда я использую <SubCommentListItem key = {subcomment.id} data = {subcomment} parentid = {commentID} updateComment = {this.updateComment} user = {user} postid = {postid} /> , она не работает нормально, я думаю, теперь вы можете мне помочь

user7362157 10.02.2019 23:08

я решил это лучше, спасибо, вы мне очень помогли, я понял вашу точку зрения

user7362157 10.02.2019 23:20

Другие вопросы по теме