简体   繁体   English

样式化组件 - 动态 styles

[英]Styled Components - dynamic styles

I learn how to use styled components in react I do step by step following the video.我学习如何在反应中使用样式化组件,我按照视频一步一步地做。 I have this piece of code I have a problem with this line and others too我有这段代码我对这行和其他行也有问题

color: ${(props) => (props.invalid ? "red" : "black")} 

VS Code tells me this VS Code 告诉我这个

"Property 'invalid' may not exist on type 'ThemedStyledProps<Pick<DetailedHTMLProps<HTMLAttributes, HTMLDivElement>, "key" | keyof HTMLAttributes> & {...; }, any>'. Did you mean 'onInvalid'?ts(2568)" “'ThemedStyledProps<Pick<DetailedHTMLProps<HTMLAttributes, HTMLDivElement>, "key" | keyof HTMLAttributes> & {...; }, any>' 类型上可能不存在属性 'invalid'。你的意思是 'onInvalid'?ts(第2568章

 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> import React, { useState } from "react"; import styled from "styled-components"; import Button from "../../UI/Button/Button"; import "./CourseInput.css"; const FormControl = styled.div` margin: 0.5rem 0; & label { font-weight: bold; display: block; margin-bottom: 0.5rem; color: ${(props) => (props.invalid? "red": "black")} } & input { display: block; width: 100%; border: 1px solid ${(props) => (props.invalid? "red": "#ccc")}; background: ${(props) => (props.invalid? "red": "transparent")} font: inherit; line-height: 1.5rem; padding: 0 0.25rem; } & input:focus { outline: none; background: #fad0ec; border-color: #8b005d; } `; const CourseInput = (props) => { const [enteredValue, setEnteredValue] = useState(""); const [isValid, setIsValid] = useState(true); const goalInputChangeHandler = (event) => { //set back true if (event.target.value.trim().length > 0) { setIsValid(true); } setEnteredValue(event.target.value); }; const formSubmitHandler = (event) => { event.preventDefault(); if (enteredValue.trim().length === 0) { //trim deletes white spacec overall setIsValid(false); return; } props.onAddGoal(enteredValue); }; return ( <form onSubmit={formSubmitHandler}> {/* <div className={`form-control ${?isValid: "invalid"; ""}`}> */} <FormControl invalid={;isValid}> <label>Course Goal</label> <input type="text" onChange={goalInputChangeHandler} /> </FormControl> {/* </div> */} <Button type="submit">Add Goal</Button> </form> ); }; export default CourseInput;

Since invalid is not a prop that the div element knows by default it does not recognize it.由于invalid不是 div 元素默认知道的道具,因此它无法识别它。

To overcome this, you can give FormControl props with the "$" key as follows:为了克服这个问题,您可以使用“$”键为 FormControl 提供道具,如下所示:

<FormControl $invalid={!isValid}>

Then, inside FormControl:然后,在 FormControl 内部:

color: ${(props) => (props.$invalid ? "red" : "black")}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM