ReactJS এ গতিশীল বৈশিষ্ট্য


93

আমি গতিযুক্তভাবে একটি বোতামের উপাদানটিতে অক্ষম বৈশিষ্ট্যকে অন্তর্ভুক্ত / বাদ দিতে চাই। আমি গতিশীল গুণাবলীর মানগুলির প্রচুর উদাহরণ দেখেছি, তবে তাদের নিজস্ব বৈশিষ্ট্যগুলির নয়। আমি নিম্নলিখিত রেন্ডার ফাংশন আছে:

render: function() {
    var maybeDisabled = AppStore.cartIsEmpty() ? "disabled" : "";
    return <button {maybeDisabled}>Clear cart</button>
}

"{" চরিত্রের কারণে এটি একটি পার্স ত্রুটি ছুড়ে ফেলে। আমি কিভাবে AppStore.cartIsEmpty () এর (বুলিয়ান) ফলাফলের ভিত্তিতে অক্ষম বৈশিষ্ট্যকে অন্তর্ভুক্ত / বাদ দিতে পারি?

উত্তর:


172

Alচ্ছিক বৈশিষ্ট্যগুলি যুক্ত করার সর্বোত্তম উপায় ( disabledআপনি এবং অন্যরাও আপনি ব্যবহার করতে পারেন) বর্তমানে জেএসএক্স স্প্রেড অ্যাট্রিবিউট ব্যবহার করার জন্য রয়েছে :

var Hello = React.createClass({
    render: function() {
        var opts = {};
        if (this.props.disabled) {
            opts['disabled'] = 'disabled';
        }
        return <button {...opts}>Hello {this.props.name}</button>;
    }
});

React.render((<div><Hello name="Disabled" disabled='true' />
    <Hello name="Enabled"  />
</div>)
, document.getElementById('container'));

স্প্রেড অ্যাট্রিবিউটগুলি ব্যবহার করে, আপনি জাভাস্ক্রিপ্ট অবজেক্ট উদাহরণটি ব্যবহার করে যা যা চান তার পক্ষে গতিশীলভাবে যুক্ত (বা ওভাররাইড) করতে পারেন can উপরের আমার উদাহরণে, কোডটি একটি disabledকী তৈরি করে ( disabledএই ক্ষেত্রে একটি মান সহ ) যখন disabledসম্পত্তিটি Helloউপাদানটির উদাহরণে চলে যায়।

আপনি যদি কেবল ব্যবহার করতে চান disabledতবে এই উত্তরটি ভাল কাজ করে।


একবারে স্থির হয়ে গেলে, সিএসএসের মতো: a[disabled] { pointer-events: none; }কোনও উপাদান / উপাদান
টিম্বো 2:51

49

আপনি disabledবৈশিষ্ট্যের কাছে একটি বুলিয়ান পাস করতে পারেন ।

render: function() {
    return <button disabled={AppStore.cartIsEmpty()}>Clear cart</button>
}

8
না তুমি পারবে না. অক্ষম বৈশিষ্ট্যের উপস্থিতি বোতামটি পুরোপুরি অক্ষম করে। দেখতে http://jsfiddle.net/ttjhyvmt/
Timmy আপনি


4
আমি কীভাবে মিস করেছি তা নিশ্চিত নই, ধন্যবাদ! যদিও এটি আমার নির্দিষ্ট ক্ষেত্রে কাজ করে, আমি অন্য একটি উত্তর গ্রহণ করেছি যা গুণাবলী বাদ / অন্তর্ভুক্ত করেছে
টিমি

4
আইই 11 নিয়ে সমস্যা থাকলেও আমরা সর্বশেষ প্রতিক্রিয়া ব্যবহার করছিলাম না। জেএসএক্স স্প্রেড অ্যাট্রিবিউটের উত্তর কাজ করেছে।
লেসকিউসার

26

আমি প্রতিক্রিয়া 16 ব্যবহার করছি এবং এটি আমার জন্য কাজ করে ( boolআপনার পরীক্ষাটি কোথায় ):

<fieldset {...(bool && {disabled:true})}>

মূলত, পরীক্ষার উপর ভিত্তি করে ( bool) আপনি শর্তসাপেক্ষ বৈশিষ্ট্য সহ কোনও বস্তুটি ফিরিয়ে দেন বা করেন না।

এছাড়াও, যদি আপনার একাধিক বৈশিষ্ট্য যুক্ত বা বাদ দিতে হয় তবে আপনি এটি করতে পারেন:

<fieldset {...(bool && {disabled:true, something:'123'})}>

পরিচালিত আরও বিস্তৃত বৈশিষ্ট্যের জন্য আমি আপনাকে জেএসএক্সের বাইরে থাকা বৈশিষ্ট্যগুলি (বা ছাড়া) অবজেক্টটি প্রিফ্যাব করার পরামর্শ দিচ্ছি।


এই সহজ এখনও খুব সহায়ক উত্তরের জন্য ধন্যবাদ!
tommygun

4

গতিশীল বৈশিষ্ট্যগুলি করার কোনও আরও পরিষ্কার উপায় যা কোনও বৈশিষ্ট্যের জন্য কাজ করে

function dynamicAttributes(attribute, value){
  var opts = {};
  if(typeof value !== 'undefined' && value !== null) {
    opts['"'+attribute+'"'] = value;
    return opts;
  }
  return false;
};

নীচের মত আপনার প্রতিক্রিয়া উপাদান কল

<ReactComponent {...dynamicAttributes("disabled",false)}
{...dynamicAttributes("data-url",dataURL)}
{...dynamicAttributes("data-modal",true)} />

পরামর্শ :

  1. আপনার dynamicAttributesকোনও সাধারণ জায়গা / ইউটিলিটিগুলিতে ফাংশন থাকতে পারে এবং এটি সমস্ত উপাদান জুড়ে এটি ব্যবহার করতে আমদানি করতে পারে

  2. আপনি nullগতিশীল বৈশিষ্ট্য রেন্ডার না হিসাবে মান পাস করতে পারে


এটি কেন করবেন না: <রিঅ্যাক্ট কম্পোনেন্ট {... {"ডেটা-ইউআরএল": ডেটাআরএল}} />? এটি সহজ এবং কোনও "ডায়নামিকঅ্যাট্রিবিউটস" দরকার নেই
23:58

বৈশিষ্ট্যটি যদি নাল হয় তবে আমরা সেই বৈশিষ্ট্যটি সরবরাহ করতে চাই না। উদাহরণ: "ডেটা-মডেল": নাল আমরা ডেটা-মডেল = "নাল" দেখানোর জন্য প্রতিক্রিয়া জানাতে চাই না। এক্ষেত্রে আমার উপরের কোডটি এমনকি মান হিসাবে গতিশীল বৈশিষ্ট্যও প্রদর্শন করবে না show
ভেঙ্কট রেড্ডি

4

গৃহীত সমাধানের চেয়ে পরিচ্ছন্ন হ'ল সমাধানটি যা অনিলরেডশিফ্ট উল্লেখ করেছে, তবে আমি এর প্রসারিত করব।

সহজ কথায় বলতে গেলে এইচটিএমএল বৈশিষ্ট্যের একটি নাম এবং একটি মান থাকে। শর্টহ্যান্ড হিসাবে, আপনি নামটি কেবল "অক্ষম", "একাধিক" ইত্যাদির জন্য ব্যবহার করতে পারেন তবে লম্বা হ্যান্ড সংস্করণটি এখনও কাজ করে এবং প্রতিক্রিয়াটিকে তার পছন্দসই পদ্ধতিতে কাজ করার অনুমতি দেয়।

disabled={disabled ? 'disabled' : undefined} সর্বাধিক সুস্পষ্ট সমাধান।


3

আমি যে সংস্করণটি ব্যবহার করেছি তা হ'ল:

<button disabled={disabled ? 'disabled' : undefined}>
    Click me (or dont)
</button>

আপনার কোডটিতে অপরিবর্তিত ব্যবহার করা খারাপ অভ্যাস। এটি অপ্রয়োজনীয় কারণ আপনি কেবল <বোতাম অক্ষম = {অক্ষম}> লিখতে পারতেন কারণ অক্ষম হ'ল বুলিয়ান পরিবর্তনশীল যা সত্য বা মিথ্যা প্রত্যাবর্তনের তুলনায়
রাফেল পিনেল

অপরিজ্ঞাত খারাপ অভ্যাস কেন? সম্ভব হলে উদ্ধৃতি। এছাড়াও সম্ভবত এখন সঠিকভাবে বলগুলি পরিচালনা করে তবে আপনার পরামর্শটি লেখার সময় ঠিকমত কাজ করবে না
অনিলরেডশিফট

2

আপনি ডকুমেন্টেশনে এ জাতীয় কিছু খুঁজে পেতে পারেন।

https://facebook.github.io/react/docs/transferences-props.html

আপনার ক্ষেত্রে এটি কিছু হতে পারে

function MyComponent(props) {
    let { disabled, ...attrs } = props;
    if (disabled) {
        // thus, it will has the disabled attribute only if it
        // is disabled
        attrs = {
            ...attrs,
            disabled: true
        }
    };

    return (
        <button {...attrs}>MyLabel</button>
    )
}

এই কোডটি ES6 ব্যবহার করছে, তবে আমি আপনাকে ধারণাটি পেয়েছি।

এটি দুর্দান্ত কারণ আপনি এই উপাদানটির সাথে আরও অনেকগুলি গুণাবলী পাস করতে পারেন এবং এটি এখনও কার্যকর হবে।


2

এটি করার একটি সহজ এবং পরিষ্কার উপায়

<button {...disabled && {disabled: true}}>Clear cart</button>

প্রতিবন্ধীদের এই জাতীয় প্রপস থেকে আসা উচিত

<MyComponent disabled />

0

প্রথমে আপনি খালি পরীক্ষা করতে পারেন

<button disabled={true}>Button 1</button>
<button disabled={false}>Button 2</button>

দ্রষ্টব্য: ** অক্ষম মান স্ট্রিং নয়, এটি বুলিয়ান হওয়া উচিত ।

এখন গতিশীল জন্য। আপনি সহজভাবে লিখতে পারেন

<button type="button" disabled={disable}  
        onClick={()=>this.setSelectValue('sms')} >{this.state.sms}</button>

আপনি দেখতে পাচ্ছেন যে আমি অক্ষম সম্পত্তি ব্যবহার করছি এবং কোঁকড়ানো বন্ধনীগুলিতে এটি স্থানীয় পরিবর্তনশীল / রাষ্ট্রের বর্ণ হতে পারে। পরিবর্তনশীল disableমান সত্য / মিথ্যা ধারণ করে।


-3

এটি কাজ করতে পারে, অক্ষমদের সাথে সমস্যা হ'ল এটির পক্ষে কেবল বুলেটিয়ান সেট করা যায় না।

if(AppStore.cartIsEmpty()){
  return "<button disabled>Clear cart</button>"
}
else
{
  return "<button>Clear cart</button>"
}

আমি ভীত ছিলাম আমাকে এটিকে অবলম্বন করতে হবে .. আমি অপেক্ষা করব আপনার উত্তর গ্রহণের আগে কারও কাছে কোনও পরামর্শ আছে কিনা
টিমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.