2016-07-06 3 views
0

Я пытаюсь сделать следующий код более красивым. В частности, я хотел бы передать значения функции карты с помощью другой функции.Передача объекта функции карты с использованием другой функции

Вот код:

... 
     this.props.slides.map((s)=>{ 
       let id = s.get('id') 
       let title = s.get('title') 
       let image = s.get('image') 
       let alt = s.get('alt') 
       let caption = s.get('caption') 
       return(

        <Carousel.Item key={id} > 
        <img width={900} height={500} alt={s.get('alt')} src={image} alt={alt}/> 
        <Carousel.Caption> 
         <h3>{title}</h3> 
         <p>{caption}</p> 
        </Carousel.Caption> 
        </Carousel.Item> 

      ) 
     })  
    } 
    </Carousel>) 
    } 
} 

... 

Поэтому в основном я нужен другой метод там (все это часть класса), как:

listSlides(){ 
... 
} 

и тогда я могу только передать, что к моей карте функция. Но я не уверен, как это написать. Я немного смущен тем, как работает map().

Документы заявляют, что первый параметр - это функция, передаваемая каждому элементу массива, но я не уверен, почему это означает, что я могу теперь делать: let id = s.something in my закрытая функция?

+1

Это может быть проще, чем вы думаете. Попробуйте просто вырезать и вставить код с помощью функции «map()» в функцию и поместить имя функции в «map (listSlides)». Если вы столкнулись с проблемой, отправьте код, который вы попробовали. – bloodyKnuckles

+0

'listSlides' не должен стать методом вашего класса, он не делает ничего особенного. Это должно быть просто объявление функции (внутри метода или вне класса), возможно статический метод, но лучше метод 's', если вообще. – Bergi

ответ

1

Добавить параметр в функции и передать его так:

this.props.slides.map(s=>listSlides(s)) 

Еще более лаконичные (благодаря @Bergi)

this.props.slides.map(listSlides); 

И функция становится:

function listSlides(s){ 
    let id = s.get('id') 
    // and so on 
} 
+0

Спасибо, это было по тому, что я думал, должно делать, но я до сих пор не понимаю, что получится. этот метод является частью прототипа javascript, и именно поэтому я могу добавить его в свою переменную s? –

+0

Да, но наоборот. Вы можете вызвать функцию get on 's', если объект, который представляет s, реализует его (получил как часть своего прототипа). Другими словами, любые объекты в массиве, возвращаемые props.slides, должны иметь возможность отвечать на get. Это связано с тем, как работает карта. Карта просто передает каждый элемент в массив функции и создает новый массив с тем, что функция возвращает для каждого элемента. – danh

+0

На самом деле это должно быть 'this.props.slides.map (listSlides)' - нет необходимости в функции стрелки – Bergi

Смежные вопросы