关于react.js:React报错之Style-prop-value-must-be-an-object

9次阅读

共计 1483 个字符,预计需要花费 4 分钟才能阅读完成。

注释从这开始~

总览

在 React 中,当咱们为元素的style 属性传递字符串时,会产生 ”Style prop value must be an object” 正告。为了解决该正告,应用从属性到值的映射。比如说,style={{paddingLeft: '15px'}}

这里有个例子来展现谬误是如何产生的。

// App.js
const App = () => {// ⛔️ Style prop value must be an object eslint(react/style-prop-object)
  return (
    <div>
      <h1 style="margin-left: 4rem">Hello world</h1>
    </div>
  );
};

export default App;

映射

上述代码的问题在于,咱们为 h1 元素的 style 属性传递了字符串。相同,style属性应该传递从属性到值的映射。

const App = () => {
  return (
    <div>
      <h1
        style={{
          marginLeft: '4rem',
          fontSize: '20px',
          padding: '20px',
          backgroundColor: 'salmon',
          color: 'white',
        }}
      >
        Hello world
      </h1>
    </div>
  );
};

export default App;

须要留神的是,这里咱们应用了 2 对大括号。外侧的大括号是对一个表达式的求值,内侧的大括号是蕴含属性名称和值的对象。

你还能够应用逻辑来计算特定的值。

const App = () => {
  return (
    <div>
      <h1
        style={{
          marginLeft: 2 + 2 + 'rem',
          fontSize: Math.random() > 0.5 ? '20px' : '40px',
          padding: '20px',
          backgroundColor: 'salmon',
          color: 'white',
        }}
      >
        Hello world
      </h1>
    </div>
  );
};

export default App;

提取

你也能够将蕴含属性和值的对象提取到一个变量中。

const App = () => {
  const h1Styles = {
    marginLeft: 2 + 2 + 'rem',
    fontSize: Math.random() > 0.5 ? '20px' : '40px',
    padding: '20px',
    backgroundColor: 'salmon',
    color: 'white',
  };

  return (
    <div>
      <h1 style={h1Styles}>Hello world</h1>
    </div>
  );
};

export default App;

须要留神的是,CSS 属性的命名必须是驼峰式。另一种办法是将你的 CSS 写在一个以 .css 为扩展名的文件中,并应用 className 属性来为你的元素申明款式。

上面是咱们如何将 h1 元素的款式移到一个名为 App.css 的文件中的一个类中。

.my-h1 {
  margin-left: 4rem;
  font-size: 20px;
  padding: 20px;
  background-color: salmon;
  color: white;
}

而后,咱们能够导入该 css 文件,并应用 my-h1 类。

import './App.css';

const App = () => {
  return (
    <div>
      <h1 className="my-h1">Hello world</h1>
    </div>
  );
};

export default App;

这是对内联款式的一种代替。须要留神的是,这个属性被称为 className 而不是 class。起因是:class 是 JavaScript 中的一个保留词。class关键字是用来申明 ES6 类的。

正文完
 0