Первое решение (правка: альтернатива)
render() {
const statement = true;
const stuff = this.buildStuff(statement, 3); // jsx result looped in divs
return (
<div>
{
statement &&
<div>
{ stuff }
</div>
}
</div>
);
}
Альтернатива, запоминание (кэширование функций), если это ваша цель:
const memoize = require('fast-memoize');
const memoized = memoize(this.buildStuff);
...
render() {
const statement = true;
return (
<div>
{
statement &&
<div>
<p>
{memoized()}
</p>
<p>
{memoized()}
</p>
<p>
{memoized()}
</p>
</div>
}
</div>
);
}
Истинная сила запоминания, однако, если вы кешируете на основе параметра, который вы даете buildStuff (может быть, вы переместите оператор в buildstuff?). В вашем случае я бы просто очистил компонент и параметры для удобства чтения, а не для оптимизации чего-либо. Итак, последний вариант:
// Stuff is a component now
const Stuff = ({statement, stuff}) => {
if(!statement)
return null;
const result = stuff();
return (
<div>
<p>
{result}
</p>
<p>
{result}
</p>
<p>
{result}
</p>
</div>
)
}
render() {
return (
<div>
<Stuff statement={true} stuff={this.buildStuff} />
</div>
);
}
Теперь вы можете выбирать, передавать ли результат или саму функцию через подпорки, а в нисходящем компоненте либо вызывать функцию, либо просто передавать ее результаты. [117 ]
Единственный ответ на ваш вопрос в заголовке: вы не можете, JSX не шаблонизатор, как Razor.
Объяснение:
// JSX
<div id="foo">Hello world</div>
// Translates into
React.createElement("div", {id: "foo"}, "Hello world");
// JSX
<div>{ statement && <div /> }</div>
// Translates to
React.createElement("div", null, statement && React.createElement("div"));
Либо вы объявляете новую переменную с атрибутом, либо вы просто не можете, поскольку javascript не позволяет создавать переменные внутри параметров функций.
Я думаю, что веб-сервис ожидает параметр json
быть установленным. Попробуйте этот вызов Ajax:
var data = {'name':'niall'};
$.ajax({
type: "POST",
url: "/WebServices/BasketServices.asmx/AddItemToBasket",
data: "json=" + JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnItemAddedSuccess
});
где JSON.stringify()
метод как тот, найденный в "официальной" реализации: http://json.org/js.html
Это должно работать. Необходимо передать json как строку с названием параметра 'json' (который совпадает с названием параметра в веб-методе.
data: "{json: '{\'name\':\'niall\'}'}",
Это всегда происходит со мной, когда я не переношу строковые данные с двойными кавычками