Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
340 views
in Technique[技术] by (71.8m points)

javascript - Two ternary operators spread into one inline style giving 'Failed to compile' error

I am trying to use two ternary operators in one line for a style element inline. This is the code I am trying to pass:

style={{ ...display: mode === "single" ? "none" : "block",
         ...display: gradientSelected === 'radial' ? "block" : "none" }}

"mode" and "gradientSelected" are states, these are the states:

const [gradientSelected, setGradientSelected] = useState("linear")
const [mode, setMode] = useState("single")

Any idea why I am getting this error?

Is there a better way to use two ternary operators in one line?

Also, is there a way to have two conditions in one ternary function? In my example, if mode === single AND gradientSelected === linear, display none.

question from:https://stackoverflow.com/questions/65649520/two-ternary-operators-spread-into-one-inline-style-giving-failed-to-compile-er

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If you're going to spread an object, it needs to be an object first:

const mode = "single";
const gradientSelected = "foo";

const style = {
  ...{ display: mode === "single" ? "none" : "block" },
  ...{ display: gradientSelected === 'radial' ? "block" : "none" }
};
         
console.log(style);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...