3 回答

TA貢獻1880條經驗 獲得超4個贊
有兩個問題。
當您調用ProjectenLijstusing時,您必須使用大括號<ProjectItem i={2} />提取屬性:i
const ProjectItem = (i) => (/* ... */);
// should be
const ProjectItem = ({i}) => (/* ... */);
請參閱解構賦值 - 對象解構
您不能渲染復雜的對象,只能渲染標量值。意思是:
<div>{ProjectenLijst[i]}</div>
// should for example be
<div>{ProjectenLijst[i].naam}</div>
// mock
const Layout = (props) => <div {...props} />;
const ProjectenLijst = [
{ naam: 'Project 1', id: 1 },
{ naam: 'Project 2', id: 2 },
{ naam: 'Project 3', id: 3 },
];
// answer
const Projecten = () => {
const ProjectItem = ({i}) => ( // extract the "i" property by using curly braces
<div>{ProjectenLijst[i].naam}</div> // refer to a scalar property, not the whole object
);
return (
<Layout>
<ProjectItem i={2} />
</Layout>
);
};
ReactDOM.render(<Projecten />, document.querySelector("#root"));
<script src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<div id="root"></div>

TA貢獻1827條經驗 獲得超8個贊
詳細說明最初的評論,因為代碼發生了變化:
const ProjectItem = ({i}) => (
<div>{ProjectenLijst[{i}]}</div>
)
首先,您制作了一個功能組件,因此您可以調用:
<ProjectItem i={0} foo="foo" bar="bar">
讓我們重寫功能組件以不破壞參數:
const ProjectItem = (props)=> {
console.log(props.i) //0
console.log(props.foo) //"foo"
console.log(props.bar) //"bar"
...
}
由于我們只需要iprop/key,我們可以解構它,包括參數:
const ProjectItem = ({i})=>{...}
或者在函數內部,假設我們想將整個 props 對象傳遞給另一個組件:
const ProjectItem = (props)=>{
const {i,foo} = props //to use locally
const aThing = thingMaker(props)
...
}
讓我們提醒自己如何索引數組:
const i = 0
const someObject = { i: i }
const alternatively = { i } //shorthand to {i:i}
const someArray = [0,1,2,3]
console.log(someArray[ i ]) //0 first element
console.log(someArray[ someObject ]) //i think it will be undefined,
簡單地說,你不能用一個對象索引到數組中。
將所有這些應用到您的原始代碼段中,并刪除大部分速記
const ProjectItem = (props)=>{
// get the index
const { i } = props //destructure
const { i: myIndex } = props //destructure and alias
const _i = props.i //same thing no destructuring
// get the item (use any of these)
const myItem0 = ProjectenLijst[i]
const myItem1 = ProjectenLijst[props.i]
const myItem2 = ProjectenLijst[myIndex]
const myItem3 = ProjectenLijst[_i]
//JSX
return <div>
{ myItem0 }
</div>
}
請注意,{ myItem0 }您有一組大括號{},中間有一個變量。
所以回顧一下,你在做什么:
const ProjectItem = ({i}) => (
<div>{ProjectenLijst[{i}]}</div>
)
是:
const ProjectItem = (props)=> {
const someArbitraryObject = { i: props.i }
const item = ProjectenLijst[ someArbitraryObject ]
console.log(someArbitraryObject) // { i: 0 }
console.log(item) // undefined
return <div>{item}</div>
}
這只是原始代碼的問題之一 -索引到數組和解構。關于什么可以用 JSX 等呈現的其他答案也適用。

TA貢獻1951條經驗 獲得超3個贊
import React from 'react';
import './projecten.scss';
import Layout from './../Layout/Layout';
import { ProjectenLijst } from '../../../data';
const Projecten = () => {
const ProjectItem = (i) => (
<div>{ProjectenLijst[i].name}</div>
)
return (
<Layout>
{ProjectenLijst.map((item, index) => {
return <ProjectItem i={index}/>
})}
</Layout>
)
}
export default Projecten;
或者
import React from 'react';
import './projecten.scss';
import Layout from './../Layout/Layout';
import { ProjectenLijst } from '../../../data';
const Projecten = () => {
const ProjectItem = (item) => (
<div>{item.name}</div>
)
return (
<Layout>
{ProjectenLijst.map(item => {
return <ProjectItem item={item}/>
})}
</Layout>
)
}
添加回答
舉報