2016-10-22 23 views
5

tôi cần phải đặt đạo cụ thành phần sau khi nó được lưu trữ trong một biến, đây là mã giả:Set thành phần của động

render(){ 

    let items = [{title:'hello'}, {title:'world'}]; 
    let component = false; 

    switch (id) { 
     case 1: 
     component = <A /> 
     break; 
     case 2: 
     component = <B /> 
     break;  
    } 

    return(
     items.map((item, index)=>{ 
     return(
      <span> 
      {/* SOMETHING LIKE THIS WOULD BE COOL - IS THAT EVEN POSSIBLE*/} 
      {component.props.set('title', item.title)} 
      </span>11 

     ) 
     }) 
    ) 
    } 

Bên return tôi chạy một vòng lặp mà tôi cần phải đặt đạo cụ cho các thành phần đó là được lưu trữ bên trong một biến .... Làm thế nào để thiết lập các đạo cụ cho thành phần này mà tôi đã lưu trước đó trong một biến?

+0

bạn không thể thay đổi trạng thái hoặc chống đỡ trong thời gian render, bạn có thể sử dụng componentDidUpdate hoặc componentWillReceiveProps cho nó – abhirathore2006

+0

Nhân bản thành phần ở đây là một lựa chọn tồi vì nó sẽ ảnh hưởng đến hiệu quả hoạt động bằng cách tạo thêm bộ nhớ cho các thành phần nhân bản. Và, sau khi nhân bản các thành phần ban đầu trở nên vô dụng. Một lần nữa, đây là một cách thực hiện xấu. –

Trả lời

0

Bạn có thể di chuyển switch bên trong map(). Hi vọng điêu nay co ich!

class A extends React.Component{ 
 
    render(){ 
 
    return <h1>Inside Component A:{this.props.title}</h1> 
 
    } 
 
} 
 

 
class B extends React.Component{ 
 
    render(){ 
 
    return <h1>Inside Component B: {this.props.title}</h1> 
 
    } 
 
} 
 

 
class Parent extends React.Component{ 
 
    render(){ 
 
     let items = [{title:'hello'}, {title:'world'}]; 
 
     const finalItems = items.map((item, index) => { 
 
     switch (parseInt(this.props.id)) { 
 
      case 1: 
 
      return <A title={item.title}/> 
 
      case 2: 
 
      return <B title={item.title}/>  
 
     } 
 
     }) 
 

 
     return(
 
     <span> {finalItems} </span> 
 
    ) 
 
    } 
 
} 
 
ReactDOM.render(<div> 
 
        <Parent id="1"/> 
 
        <Parent id="2"/> 
 
        <Parent id="3"/> 
 
       </div>, 
 
    document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app"></div>

Bạn không cần phải thêm một trường hợp default như Phản ứng sẽ bỏ qua undefined, mà sẽ được trả lại cho map khi các trường hợp chuyển đổi thất bại.

+1

Chuyển đổi theo id không có kết nối với vòng lặp mục nên được gọi bên ngoài, Bạn đang thực hiện thao tác tương tự trong mỗi vòng lặp và thao tác này chỉ nên thực hiện một lần. Mã này cho hiệu suất kém và thực hành không tốt. –

+0

@MaciejSikora Đã thêm một ví dụ làm việc. Hy vọng điều này làm rõ! –

0

Nó có thể được thực hiện bằng cách chỉ định không jsx nhưng tham chiếu thành phần, sau đó sử dụng jsx trong vòng lặp với việc sử dụng thành phần từ biến. Kiểm tra các thay đổi mã của tôi.

render(){ 

let items = [{title:'hello'}, {title:'world'}]; 
let C = null; //null is more accurate for object variable 

switch (id) { 
    case 1: 
    C = A; //it is component reference, C must be from upper letter 
    break; 
    case 2: 
    C = B; //it is component reference 
    break; 
    default: 
    C = A; //good to have default for wrong ids  
} 

return(
    items.map((item, index)=>{ 
    return(
     <span> 
     <C {...item} /> //render component with props 
     </span>11 

    ) 
    }) 
) 
} 

điều quan trọng nhất:

1. C=A; chúng ta thiết lập trên tài liệu tham khảo C biến để nhắm mục tiêu thành phần

2. <C {...item} /> tất cả các thuộc tính từ đối tượng mục sẽ được đặt trong thành phần con.

3.It có thể được sử dụng theo cách tiêu chuẩn như: <C title={item.title} />

Một số ví dụ làm việc: https://jsfiddle.net/maciejsikora/jtt91wL3/3/

+0

Khi 'C' trở thành' null', vì tôi không thấy trường hợp 'mặc định' trong' chuyển' để xử lý trường hợp này, React sẽ ném một lỗi. Bạn có thể thử nó! –

+0

@PraneshRavi rất buồn cười và nơi bạn thấy mặc định là sai? Và những gì đã phản ứng với tuyên bố chuyển đổi tiêu chuẩn? Có thử nó cho mình! Câu hỏi là về cách đặt đạo cụ thành thành phần được gán động, không phải về mặc định trong chuyển đổi. –

+0

Mã của bạn sẽ không hoạt động nếu 'id' là 3. LOL. –

Các vấn đề liên quan