Как вернуть HTML текстовую переменную в реагировать и печатать как HTML? - PullRequest
0 голосов
/ 05 октября 2018

Функция 1, которая возвращает массив JSON.

function allPlans()
{
    var all_plans = {
            'Stock Card Views' : {
                'free':{status:true,plantext:"5 Per Month"},
                'premium':{status:true,plantext:"Unlimited"},
                'vip':{status:true,plantext:"5 Per Month"}                            
            },
            'Portfolio Creation' : {
                'free':{status:true,plantext:"Unlimited"},
                'premium':{status:true,plantext:"Unlimited"},
                'vip':{status:true,plantext:"Unlimited"}                            
            },
            'Transactions In A Portfolio' : {
                'free':{status:true,plantext:"Unlimited"},
                'premium':{status:true,plantext:"Unlimited"},
                'vip':{status:true,plantext:"Unlimited"}                            
            },
            'Advance Filter':{
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"Full Access"},
                'vip':{status:true,plantext:"Full Access"}                            
            },
            'Stock Card Requests' : {
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"3 Per Month"},
                'vip':{status:true,plantext:"3 Per Month"}                            
            },
            'Premium Posrfolio Access' : {
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"-"},
                'vip':{status:true,plantext:"1 Portfolio"}                            
            },
            'Investment Pick' : {
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"-"},
                'vip':{status:true,plantext:"1 Per Month"}                            
            },
        }

    return all_plans;
}

Функция 2: Используется выше функции в функции ниже

function renderPlansArray()
{

    var all_plans = allPlans();
    var rowclass = true;

    var htmltext = "";
    for(var PlanName in all_plans) 
    {

        console.log(plan_item_gray);
        if (props.planname == 'free')
        {

            if(rowclass == true)
            {
                rowclass = false;
                htmltext += <div className={plan_item_gray}>all_plans[PlanName]['free']['plantext']</div>;
            }
            else
            {
                rowclass = true;
                htmltext += <div className={plan_item}>all_plans[PlanName]['free']['plantext']</div>;
            }


        }

    }

    return(htmltext);

}

Inвышеупомянутая функция, я сгенерировал текст HTML в переменной htmltext и возвращаю.Но когда я возвращаю то же, что и выше, это возвращает [объектный объект], а когда я конвертирую в строку, он печатает HTML-текст как есть.

Я хочу вернуть эту переменную как HTML.

Я вызвал вышеуказанную функцию в другой функции для рендеринга HTML, как показано ниже.

return (<div className={plan_column}>
   {renderPlansArray()}
</div>)

Возвращается:

enter image description here

И

enter image description here

Мне нужен HTML LIKE:

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Поскольку вы хотите установить HTML напрямую, вам нужно использовать dangerouslySetInnerHTML что-то вроде:

someHtml = '<div><strong>blablabla<strong><p>another blbla</p/></div>'


return(<div className="Container" dangerouslySetInnerHTML={{__html: 
            someHtml}}></div>)

Однако вы не должны работать с jsx и реагировать.Лучшим подходом будет использование React.components и их рендеринг.

0 голосов
/ 05 октября 2018

Если вы используете React, вам не нужно связываться с HTML.
Вы можете визуализировать свои данные, используя React.Components.Ниже я создал фрагмент кода, чтобы показать, как это можно сделать.

Надеюсь, это поможет.

function allPlans()
{
    var all_plans = {
            'Stock Card Views' : {
                'free':{status:true,plantext:"5 Per Month"},
                'premium':{status:true,plantext:"Unlimited"},
                'vip':{status:true,plantext:"5 Per Month"}                            
            },
            'Portfolio Creation' : {
                'free':{status:true,plantext:"Unlimited"},
                'premium':{status:true,plantext:"Unlimited"},
                'vip':{status:true,plantext:"Unlimited"}                            
            },
            'Transactions In A Portfolio' : {
                'free':{status:true,plantext:"Unlimited"},
                'premium':{status:true,plantext:"Unlimited"},
                'vip':{status:true,plantext:"Unlimited"}                            
            },
            'Advance Filter':{
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"Full Access"},
                'vip':{status:true,plantext:"Full Access"}                            
            },
            'Stock Card Requests' : {
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"3 Per Month"},
                'vip':{status:true,plantext:"3 Per Month"}                            
            },
            'Premium Posrfolio Access' : {
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"-"},
                'vip':{status:true,plantext:"1 Portfolio"}                            
            },
            'Investment Pick' : {
                'free':{status:true,plantext:"-"},
                'premium':{status:true,plantext:"-"},
                'vip':{status:true,plantext:"1 Per Month"}                            
            },
        }

    return all_plans;
}

const Column = ({data}) => (
  <ul>
    {data.map(option => (
      <li key={option.title}>
        {option.title}: {option.text}
      </li>
    ))}
  </ul>
)

const App = () => {
  const options = allPlans();
  const plansMap = Object.keys(options).reduce((acc, title) => {
    const plans = options[title];
    
    Object.keys(plans).forEach(plan => {
      if (!acc[plan]) {
        acc[plan] = [];
      }
    
      acc[plan].push({
        title,
        status: plans[plan].status,
        text: plans[plan].plantext
      })
    });
    
    return acc;
  }, {})
  
  return (
    <div>
      {Object.keys(plansMap).map(plan => (
        <div key={plan}>
          <h3>{plan}</h3>
          <Column data={plansMap[plan]} />
        </div>
      ))}
    </div>
  )
}

ReactDOM.render(<App />, document.querySelector("#root"));
<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="root"></div>
...