javascript - React 根据结果数量动态创建按钮

标签 javascript java spring reactjs web

我正在使用 React 的 Spring 应用程序中工作。目前我有一个 json,其中包含基于某些条件的多个用户。用户数量可能会有所不同,但我想为每个返回的用户创建几个链接到用户个人资料的按钮。网址只是“/profile/username”

json格式

[{"user":{"principal":"cat@sitter.com","schedule":null,"appointments":null,"roles":["ROLE_USER"],"attributes":{"principal":"cat@sitter.com","zipcode":"98077","firstname":"cat","password":"abc123","sitterFlag":"true","ownerFlag":"false","lastname":"sitter","username":"catsitter","preferredPet":"Cat"},"momento":"cat@sitter.com"},"password":"$2a$10$ltnL.mFqo7hatj69Ls76xeegjhEX0D4At9m1rlBHbQtDrV8MdSeAS","momento":"cat@sitter.com"},{"user":{"principal":"test@pets.com","schedule":null,"appointments":null,"roles":["ROLE_USER"],"attributes":{"principal":"test@pets.com","zipcode":"98077","firstname":"test","password":"abc123","sitterFlag":"false","ownerFlag":"false","lastname":"pets","username":"testpets"},"momento":"test@pets.com"},"password":"$2a$10$wDhS6Mb8syhC0YIqgVG2qu8J6lA.1T.UprMYwAX6O7Xb3YMhgX3bO","momento":"test@pets.com"},{"user":{"principal":"test@sitter.com","schedule":null,"appointments":null,"roles":["ROLE_USER"],"attributes":{"principal":"test@sitter.com","zipCode":"98077","firstname":"test","password":"abc123","lastname":"sitter","username":"testsitter"},"momento":"test@sitter.com"},"password":"$2a$10$DuIeWFSzhtAjX3lr8xBNiu2kV9kAJ/PQ6pB/EzkB7FkGWfRbwxkzy","momento":"test@sitter.com"},{"user":{"principal":"sit@sitter.com","schedule":null,"appointments":null,"roles":["ROLE_USER"],"attributes":{"principal":"sit@sitter.com","zipCode":"98077","firstname":"sit","password":"abc123","lastname":"sitter","username":"imasitter"},"momento":"sit@sitter.com"},"password":"$2a$10$2NKOQkGZO/jUer3UjNGzdugUhkMV1pJ1eT8NQjSPRto9/cRdm56sO","momento":"sit@sitter.com"},{"user":{"principal":"a@sitter.com","schedule":null,"appointments":null,"roles":["ROLE_USER"],"attributes":{"principal":"a@sitter.com","zipCode":"98077","firstname":"a","password":"abc123","lastname":"sitter","username":"asitter"},"momento":"a@sitter.com"},"password":"$2a$10$8x1uVqR28x5rwNrydieSyu1ILifBJ5n0dUsZI5tJ6MoUWMqXxrmeq","momento":"a@sitter.com"}]

如果我为每个用户进行硬编码,我目前可以正常工作:

<div className="container padded">
    <div className="row">
        <div className="col-6 offset-md-3">
            <h2>Suggested Sitters</h2>
            <button onClick={() => this.suggestSitter(this.props.user.principal)}>Click</button>
            <hr/>
            <div>
                Sitters:
            </div>
            <Link to={this.setProfile(this.state.sitter ? this.state.sitter[1].user.attributes.username: ' ')} >
                <button type="button">{this.state.sitter ? this.state.sitter[1].user.attributes.username: ' '}</button>
            </Link>
        </div>
    </div>
</div>

setProfile 的工作方式如下:

setProfile(theUser) {
    return '/profile/' + theUser;
}

单击按钮将重定向到该用户的个人资料页面。

所以基本上,我不想对 n 个按钮进行硬编码,而是想动态创建 n 个按钮,每个按钮都会链接到返回的每个用户的“/profile/username/”。

建议保姆功能:

suggestSitter(user){
        var _this = this;
        console.log('user', user);
        axios.get('/api/user/suggest_sitter', { params: { principal: user } })
            .then(function(response) {
                console.log('Response: ' + JSON.stringify(response));
                _this.setState({
                    sitter: response
                });
            })
            .catch(function (e) {
                console.log('Error: ' + e);
            });
    }

最佳答案

您可以将数据映射到Link数组(也为其提供唯一的键):

{this.state.sitter.map((e) => (
  <Link key={e.someUniqueProperty} to={this.setProfile(e.user.attributes.username)}>
    <button type="button">{e.user.attributes.username}</button>
  </Link>
))}

关于javascript - React 根据结果数量动态创建按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015445/

相关文章:

javascript - 动态地将新链接附加到列表顶部而不是列表底部

java - modelmapper 跳过嵌套对象的属性

spring - Spring Boot应用中service层有什么用?

java - 如何在spring boot中启用浏览器缓存

javascript - D3.js defs 和 url() 不起作用

javascript - 使用 jQuery 将 HTML 字符串转换为 DOM 对象

javascript - 将跨度值存储到 javascript 变量中

java - Android 强制更新 Webview session

java - 正则表达式取代日志记录

java - sun.security.provider.SHA2 使用 100% cpu 并在一段时间后挂起 5 分钟